タイトル | : Re^7: TabControlをTabStripのように使いたい |
記事No | : 6212 |
投稿日 | : 2007/08/31(Fri) 11:04 |
投稿者 | : 魔界の仮面弁士 |
>> 皐月さん (No.6112) > TabControlはTabStripと同じ用に使用することはできないのでしょうか?
できますよ。 そういうときには、子コントロールを TabPage の上に配置するのではなく、 フォームに直接配置すれば良いかと思います。
まずはデザイン時に、DataGridView をフォームに直接貼り付けてください。 その DataGridView を選択後、右クリックして[最前面へ移動]を選択してから、 DataGridView を TabControl に重なる位置まで移動させれば OK。 移動には矢印キーを使うか、DataGridView の Location プロパティを手動設定で。
>> るしぇさん (No.6190) > [VB6.0]のときは Container プロパティがあったけど、.NET以後だと > Controls プロパティのコレクションに追加するのでは?
その方法でもできますが、親コントロールを変更する目的であれば、 Parent プロパティを設定する方がわかりやすいかも知れません。 (VB6 の Container プロパティの処理イメージにも近いですしね)
>> ダンボさん (No.6207) > どうしてこんな便利なContainerプロパティを無くすんでしょう?
.NET にも Containerプロパティ自体は存在しますが、VB6 とは意味が変わっていますね。 VB6 の Container は、親コントロール(コンテナ コントロール)を指すプロパティですが、 .NET の Container は、(コントロールではなく)コンポーネントを管理するものです。 (コンポーネントの例としては、System.Windows.Forms.Timer などがあります)
そもそも .NET では、コントロールの親子関係をわかりやすくするため、VB6 とは コントロールの管理方法が変化しています。たとえば、以下の 2 つの構成を比べてみましょう。
<VB6> <.NET> Form1 Form1 ├Frame1 ├GroupBox1 │├Frame2 │├GroupBox2 ││└Command1 ││└Button1 │└Command2 │└Button2 └Command3 └Button3
<VB6> Me.Controls … すべてのコントロールを示す。(Frame1, Frame2, Command1, Command2, Command3) Frame1.Parent … Form1 を示す。 Frame2.Parent … Form1 を示す。 Command1.Parent … Form1 を示す。 Command2.Parent … Form1 を示す。 Command3.Parent … Form1 を示す。 Frame1.Container … Form1 を示す。 Frame2.Container … Frame1 を示す。 Command1.Container … Frame2 を示す。 Command2.Container … Frame1 を示す。 Command3.Container … Form1 を示す。
<.NET> Me.Controls … フォーム直下のコントロールを示す。(GroupBox1, Button3) GroupBox1.Controls … GroupBox1直下のコントロールを示す。(GroupBox2, Button2) GroupBox2.Controls … GroupBox2直下のコントロールを示す。(Button1) GroupBox1.Parent … Form1 を示す。 GroupBox2.Parent … GroupBox1 を示す。 Button1.Parent … GroupBox2 を示す。 Button2.Parent … GroupBox1 を示す。 Button3.Parent … Form1 を示す。
VB6 の場合、「○○の親コントロール」は得やすいですが(Container プロパティ)、 「××の子コントロール」を得る方法が用意されていませんでした。
一方.NET の場合、親は Parent プロパティ、子は Controls プロパティで管理され、 コントロールの階層構造を容易に把握できるようになっていますね。
ちなみに .NET では、Form も Control の一種となったため、こんなことも可能です。
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click Dim F As New Form() F.Text = "サンプル" F.TopLevel = False Me.Controls.Add(F) 'Me ではなく、Button1 や RichTextBox1 の上にも配置可能。 F.Visible = True End Sub
|