C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 動的コントロールの配置について


(過去ログ 108 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■64165 / inTopicNo.1)  動的コントロールの配置について
  
□投稿者/ mino (1回)-(2012/11/09(Fri) 15:52:15)

分類:[VB.NET/VB2005 以降] 

VB2010を使用しています。
フォーム上にコントロールを動的に配置したいと思い、下記のコードを記載しました。
ですが、テキストボックスの上部がメニューバーの下に潜り込んでしまいます。
コントロールが重ならないようにするにはどうすればいいでしょうか。

Private mnu1 As System.Windows.Forms.MenuStrip
Private txtMain As System.Windows.Forms.TextBox

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    Me.mnu1 = New System.Windows.Forms.MenuStrip()
    Me.mnu1.Name = "mnuMain"
    Me.mnu1.Items.Add("aaa")
    Me.Controls.Add(Me.mnu1)

    Me.txtMain = New System.Windows.Forms.TextBox()
    Me.txtMain.Name = "txtMain"
    Me.txtMain.Multiline = True
    Me.txtMain.Dock = DockStyle.Fill
    Me.txtMain.Text = "aaaa"
    Me.Controls.Add(Me.txtMain)

End Sub

引用返信 編集キー/
■64168 / inTopicNo.2)  Re[1]: 動的コントロールの配置について
□投稿者/ howling (67回)-(2012/11/09(Fri) 16:31:40)
minoさん

コントロールは追加してますが、自動的に重ならないように配置してくれるわけではありません。
配置はLocationプロパティで行います。
この場合、多分テキストボックスが重ならなければいいのかな?

//C#で書くと…
//右横にずらして表示
Me.txtMain.Location = new Point(Me.mnu1.Location.X + Me.mnu1.Width,Me.mnu1.Location.Y);

//VBだとこうなるのかな…
Me.txtMain.Location = New Point(Me.mnu1.Location.X + Me.mnu1.Width, Me.mnu1.Location.Y);

縦にずらす場合は、Xの方のWidthを抜いて、Yの方にHeightを足してください。

http://jeanne.wankuma.com/tips/vb.net/control/location.html
引用返信 編集キー/
■64169 / inTopicNo.3)  Re[1]: 動的コントロールの配置について
□投稿者/ ヴァン (14回)-(2012/11/09(Fri) 16:46:47)
こんにちは。

> Me.txtMain.Dock = DockStyle.Fill

Dock を Fill にしているからMe.Controls に Add する順番かな?


No64165 (mino さん) に返信
> VB2010を使用しています。
> フォーム上にコントロールを動的に配置したいと思い、下記のコードを記載しました。
> ですが、テキストボックスの上部がメニューバーの下に潜り込んでしまいます。
> コントロールが重ならないようにするにはどうすればいいでしょうか。
>
> Private mnu1 As System.Windows.Forms.MenuStrip
> Private txtMain As System.Windows.Forms.TextBox
>
> Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
>
> Me.mnu1 = New System.Windows.Forms.MenuStrip()
> Me.mnu1.Name = "mnuMain"
> Me.mnu1.Items.Add("aaa")
> Me.Controls.Add(Me.mnu1)
>
> Me.txtMain = New System.Windows.Forms.TextBox()
> Me.txtMain.Name = "txtMain"
> Me.txtMain.Multiline = True
> Me.txtMain.Dock = DockStyle.Fill
> Me.txtMain.Text = "aaaa"
> Me.Controls.Add(Me.txtMain)
>
> End Sub
>
引用返信 編集キー/
■64171 / inTopicNo.4)  Re[1]: 動的コントロールの配置について
□投稿者/ shu (91回)-(2012/11/09(Fri) 17:10:43)
2012/11/09(Fri) 17:12:15 編集(投稿者)

No64165 (mino さん) に返信

> Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
>
> Me.mnu1 = New System.Windows.Forms.MenuStrip()
> Me.mnu1.Name = "mnuMain"
> Me.mnu1.Items.Add("aaa")
> Me.Controls.Add(Me.mnu1)
>
> Me.txtMain = New System.Windows.Forms.TextBox()
> Me.txtMain.Name = "txtMain"
> Me.txtMain.Multiline = True
> Me.txtMain.Dock = DockStyle.Fill
> Me.txtMain.Text = "aaaa"
> Me.Controls.Add(Me.txtMain)
>
> End Sub

このくらいのコントロール追加処理をなぜデザインで行わないのかかりませんが、
デザインで配置してみてDesigner.vbの中身を見ると参考になります。

配置するコントロールが可変になるようなら可変になるコントロールの配置を
あらかじめ配置したPanel上に行うと処理しやすいです。

条件により表示するコントロールを変えるだけならデザインで配置してVisibleなどで
表示制御をされた方がよいです。
引用返信 編集キー/
■64172 / inTopicNo.5)  Re[2]: 動的コントロールの配置について
□投稿者/ howling (68回)-(2012/11/09(Fri) 17:13:15)
ほんとだ。Fillにしてる…。
なら順番ですね。ソースしっかり見てなくてすみません…。

引用返信 編集キー/
■64173 / inTopicNo.6)  Re[2]: 動的コントロールの配置について
□投稿者/ pang2 (4回)-(2012/11/09(Fri) 17:18:08)
デザイナーで実際に配置してみて、出来上がった 〜.Designer.csのコードを研究すればよい。
引用返信 編集キー/
■64175 / inTopicNo.7)  Re[2]: 動的コントロールの配置について
□投稿者/ mino (2回)-(2012/11/09(Fri) 17:56:20)
2012/11/09(Fri) 17:57:26 編集(投稿者)
2012/11/09(Fri) 17:57:18 編集(投稿者)

皆様

迅速なご回答ありがとうございます。

Designer.vbを確認したところ、SuspendLayoutとResumeLayoutが
キーになっていることが確認できました。

テストでそれっぽいところにコードを書いたら思い通りにレイアウトできました。

このメソッドについてきっちり調べて使い方が間違っていないか確認します。

多くのアドバイスありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -