- 題名: クエリデザイナみたいなもの
- 日時: 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のアプリを作ろうとしています。
しかし、どのように実現すればいいのか見当もつかず困っています。
何かヒントになるようなキーワードだけでもいいので
分かる方がいらっしゃれば教えて頂けないでしょうか?