- 題名: クエリデザイナみたいなもの
- 日時: 2011/10/05 15:07:20
- ID: 29155
- この記事の返信元:
- (なし)
- この記事への返信:
- [29160] Re[1]: クエリデザイナみたいなもの2011/10/06 7:43:26
- [29165] Re[1]: クエリデザイナみたいなもの2011/10/06 16:18:01
- ツリーを表示
■No29172に返信(レオパーさんの記事)
> MDIフォームでやればいいのでしょうかね?
SDI で良いと思いますよ。
MDI フォームだと、むしろ制御しにくい気がしますし。
(クエリデザイナの個々のリストは、フォームではありません)
で、まずはこういう画面を作りたいのかな…と予想。
http://hanatyan.sakura.ne.jp/samplepic/vb6_151.htm
上記画像は VB6 のものですが、VB.NET だとこんな感じかな。
Partial Public Class Form1
Inherits Form
Private WithEvents ListBox1 As ListBox
Private WithEvents ListBox2 As ListBox
Private WithEvents ListBox3 As ListBox
Private WithEvents ListBox4 As ListBox
Private WithEvents ListBox5 As ListBox
Private WithEvents ListBox6 As ListBox
Public Sub New()
InitializeComponent()
Me.ListBox1 = New ListBox()
Me.ListBox2 = New ListBoxEx(ListBoxEx.CaptionStyle.Normal, "可変サイズ", True)
Me.ListBox3 = New ListBoxEx(ListBoxEx.CaptionStyle.Normal, "固定サイズ", False)
Me.ListBox4 = New ListBoxEx(ListBoxEx.CaptionStyle.ToolTitle, "可変ツール", True)
Me.ListBox5 = New ListBoxEx(ListBoxEx.CaptionStyle.ToolTitle, "固定ツール", False)
Me.ListBox6 = New ListBoxEx(ListBoxEx.CaptionStyle.None, Nothing, True)
Me.ListBox1.Items.Add("通常版")
Me.ListBox2.Items.AddRange("可変,タイトルあり".Split(","c))
Me.ListBox3.Items.AddRange("固定,タイトルあり".Split(","c))
Me.ListBox4.Items.AddRange("可変,ツールタイトル".Split(","c))
Me.ListBox5.Items.AddRange("固定,ツールタイトル".Split(","c))
Me.ListBox6.Items.Add("リサイズ可能")
Me.ListBox1.Location = New Point(0, 0)
Me.ListBox2.Location = New Point(140, 0)
Me.ListBox3.Location = New Point(0, 120)
Me.ListBox4.Location = New Point(140, 120)
Me.ListBox5.Location = New Point(0, 240)
Me.ListBox6.Location = New Point(140, 240)
Controls.Add(Me.ListBox6)
Controls.Add(Me.ListBox5)
Controls.Add(Me.ListBox4)
Controls.Add(Me.ListBox3)
Controls.Add(Me.ListBox2)
Controls.Add(Me.ListBox1)
End Sub
End Class
Partial Public Class ListBoxEx
Inherits ListBox
Public Enum CaptionStyle
None
Normal
ToolTitle
End Enum
Private _captionType As CaptionStyle
Private _caption As String
Private _resizable As Boolean
Public Sub New(ByVal style As CaptionStyle, ByVal caption As String, ByVal resizable As Boolean)
_captionType = style
If style = CaptionStyle.None Then
_caption = Nothing
Else
_caption = caption
End If
_resizable = resizable
End Sub
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim p As CreateParams = MyBase.CreateParams
Select Case _captionType
Case CaptionStyle.Normal
p.Caption = _caption
p.Style = p.Style Or WindowStyles.WS_CAPTION Or WindowStyles.WS_BORDER
Case CaptionStyle.ToolTitle
p.Caption = _caption
p.Style = p.Style Or WindowStyles.WS_CAPTION
p.ExStyle = p.ExStyle Or WindowStylesEx.WS_EX_TOOLWINDOW
Case Else
p.Style = p.Style And Not WindowStyles.WS_CAPTION And Not WindowStyles.WS_BORDER
p.Caption = Nothing
End Select
If _resizable Then
p.Style = p.Style Or WindowStyles.WS_THICKFRAME
Else
p.Style = p.Style And Not WindowStyles.WS_THICKFRAME
End If
Return p
End Get
End Property
'https://sites.google.com/site/autohotkeyjp/reference/misc/Styles
<Flags()> Private Enum WindowStyles
WS_BORDER = &H800000
WS_POPUP = &H80000000
WS_CAPTION = &HC00000
WS_DISABLED = &H8000000
WS_DLGFRAME = &H400000
WS_HSCROLL = &H100000
WS_MAXIMIZE = &H1000000
WS_MAXIMIZEBOX = &H10000
WS_MINIMIZE = &H20000000
WS_MINIMIZEBOX = &H20000
WS_OVERLAPPED = &H0
WS_OVERLAPPEDWINDOW = &HCF0000
WS_POPUPWINDOW = &H80880000
WS_SIZEBOX = &HF2C0
WS_SYSMENU = &H80000
WS_THICKFRAME = &H40000
WS_VSCROLL = &H200000
WS_VISIBLE = &H10000000
WS_CHILD = &H40000000
WS_GROUP = &H20000
End Enum
<Flags()> Private Enum WindowStylesEx
WS_EX_DLGMODALFRAME = &H1
WS_EX_NOPARENTNOTIFY = &H4
WS_EX_TOPMOST = &H8
WS_EX_ACCEPTFILES = &H10
WS_EX_TRANSPARENT = &H20
WS_EX_MDICHILD = &H40
WS_EX_TOOLWINDOW = &H80
WS_EX_WINDOWEDGE = &H100
WS_EX_CLIENTEDGE = &H200
WS_EX_CONTEXTHELP = &H400
WS_EX_RIGHT = &H1000
WS_EX_LEFT = &H0
WS_EX_RTLREADING = &H2000
WS_EX_LTRREADING = &H0
WS_EX_LEFTSCROLLBAR = &H4000
WS_EX_RIGHTSCROLLBAR = &H0
WS_EX_CONTROLPARENT = &H10000
WS_EX_STATICEDGE = &H20000
WS_EX_APPWINDOW = &H40000
WS_EX_OVERLAPPEDWINDOW = &H300
WS_EX_PALETTEWINDOW = &H188
WS_EX_LAYERED = &H80000
End Enum
End Class
■No29177に追記(魔界の仮面弁士の記事)
> 上記画像は VB6 のものですが、VB.NET だとこんな感じかな。
別案。
先のコードは、ListBox にタイトルバーやリサイズ枠を付ける手法ですが、
こちらは、ListBoxを貼ったフォームを、フォーム内に貼る方法です。
このサイト(dobon.net)でも紹介されている手法ですね。
http://dobon.net/vb/dotnet/form/formwithinform.html
Partial Public Class Form1
Inherits Form
Private list As New List(Of ChildForm)()
Public Sub New()
InitializeComponent()
For y As Integer = 0 To 2
Dim f As New ChildForm()
f.Location = New Point(10, 10 + y * 120)
f.Size = New Size(100, 100)
f.Name = String.Format("Child{0}", y)
f.Text = f.Name
list.Add(f)
Controls.Add(f)
f.Show()
Next
End Sub
End Class
Partial Public Class ChildForm
Inherits Form
Private WithEvents ListBox1 As New ListBox()
Public Sub New()
TopLevel = False
StartPosition = FormStartPosition.Manual
FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow
ListBox1.Dock = DockStyle.Fill
ListBox1.IntegralHeight = False
Controls.Add(ListBox1)
End Sub
End Class
分類:[.NET]
はじめまして。レオパーです。
現在C#のWindows FormでAccessのクエリデザイナのような
UIのアプリを作ろうとしています。
しかし、どのように実現すればいいのか見当もつかず困っています。
何かヒントになるようなキーワードだけでもいいので
分かる方がいらっしゃれば教えて頂けないでしょうか?