コントロールを実行時に作成するコントロールをフォームに配置する時、通常はVisual Studioのフォームデザイナを使って行うでしょう。しかし、実行時に、動的にコントロールを作成してフォームに配置する必要もあるでしょう。ここでは、Buttonコントロールをフォームに配置する方法を例に、コントロールを実行時に作成する方法を説明します。 コントロールを作成し、フォームに表示する"Button1"というButtonコントロールを作成して、フォームに表示するには、次のようにします。 [VB.NET] Private Button1 As System.Windows.Forms.Button 'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load 'Buttonクラスのインスタンスを作成する Me.Button1 = New System.Windows.Forms.Button() 'Buttonコントロールのプロパティを設定する Me.Button1.Name = "Button1" Me.Button1.Text = "押してね" 'サイズと位置を設定する Me.Button1.Location = New Point(10, 10) Me.Button1.Size = New System.Drawing.Size(80, 20) 'フォームに追加する Me.Controls.Add(Me.Button1) End Sub [C#] private System.Windows.Forms.Button Button1; //フォームのLoadイベントハンドラ private void Form1_Load(object sender, EventArgs e) { //Buttonクラスのインスタンスを作成する this.Button1 = new System.Windows.Forms.Button(); //Buttonコントロールのプロパティを設定する this.Button1.Name = "Button1"; this.Button1.Text = "押してね"; //サイズと位置を設定する this.Button1.Location = new Point(10, 10); this.Button1.Size = new System.Drawing.Size(80, 20); //フォームに追加する this.Controls.Add(this.Button1); } Buttonクラスのインスタンスを作成し、必要なプロパティを設定し、フォームのControlsプロパティのAddメソッドを使ってフォームに配置しています。 ここではフォームのLoadイベントハンドラで行いましたが、フォームクラスのコンストラクタで行う方法もあります。 注意:上記のC#のコードは、このままコピーしただけでは動きません。イベントハンドラをイベントに関連付ける必要があります。この方法については、こちらで説明しています。 コントロールのイベントを捕捉するコントロールのイベントを捕捉する方法は、「イベントを捕捉する」で説明していますので、そちらをご覧ください。 ここでは、上記のコードにButton1のClickイベントを捕捉するコードを追加した例のみを示します。 [VB.NET] Private Button1 As System.Windows.Forms.Button 'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load 'Buttonクラスのインスタンスを作成する Me.Button1 = New System.Windows.Forms.Button() 'Buttonコントロールのプロパティを設定する Me.Button1.Name = "Button1" Me.Button1.Text = "押してね" 'サイズと位置を設定する Me.Button1.Location = New Point(10, 10) Me.Button1.Size = New System.Drawing.Size(80, 20) 'Clickイベントハンドラを追加する AddHandler Me.Button1.Click, AddressOf Button1_Click 'フォームに配置する Me.Controls.Add(Me.Button1) End Sub Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As EventArgs) Console.WriteLine("Button1がクリックされました") End Sub [C#] private System.Windows.Forms.Button Button1; //フォームのLoadイベントハンドラ private void Form1_Load(object sender, EventArgs e) { //Buttonクラスのインスタンスを作成する this.Button1 = new System.Windows.Forms.Button(); //Buttonコントロールのプロパティを設定する this.Button1.Name = "Button1"; this.Button1.Text = "押してね"; //サイズと位置を設定する this.Button1.Location = new Point(10, 10); this.Button1.Size = new System.Drawing.Size(80, 20); //Clickイベントハンドラを追加する this.Button1.Click += new EventHandler(Button1_Click); //フォームに配置する this.Controls.Add(this.Button1); } private void Button1_Click(object sender, EventArgs e) { Console.WriteLine("Button1がクリックされました"); } 補足:複数のコントロールを一度にフォームに配置するには、Addメソッドの代わりに、AddRangeメソッドを使うこともできます。AddRangeメソッドを使用した例は、「コントロールの配列を作成する」をご覧ください。 パフォーマンスを向上させるコントロールをフォームに配置するとき、その前にSuspendLayoutメソッドを呼び出してレイアウトロジックを一時停止させることにより、パフォーマンスが向上します。特にたくさんのコントロールをフォームに配置する時は、SuspendLayoutメソッドを使用したほうがよいでしょう。 SuspendLayoutメソッドを使用する例を以下に示します。 [VB.NET] Private Button1 As System.Windows.Forms.Button 'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load 'Buttonクラスのインスタンスを作成する Me.Button1 = New System.Windows.Forms.Button() 'フォームのレイアウトロジックを中断する Me.SuspendLayout() 'Buttonコントロールのプロパティを設定する Me.Button1.Name = "Button1" Me.Button1.Text = "押してね" 'サイズと位置を設定する Me.Button1.Location = New Point(10, 10) Me.Button1.Size = New System.Drawing.Size(80, 20) 'フォームに追加する Me.Controls.Add(Me.Button1) 'フォームのレイアウトロジックを再開する Me.ResumeLayout(False) End Sub [C#] private System.Windows.Forms.Button Button1; //フォームのLoadイベントハンドラ private void Form1_Load(object sender, EventArgs e) { //Buttonクラスのインスタンスを作成する this.Button1 = new System.Windows.Forms.Button(); //フォームのレイアウトロジックを中断する this.SuspendLayout(); //Buttonコントロールのプロパティを設定する this.Button1.Name = "Button1"; this.Button1.Text = "押してね"; //サイズと位置を設定する this.Button1.Location = new Point(10, 10); this.Button1.Size = new System.Drawing.Size(80, 20); //フォームに追加する this.Controls.Add(this.Button1); //フォームのレイアウトロジックを再開する this.ResumeLayout(false); } 補足:上記の例ではResumeLayoutメソッドにfalseを指定していますが、これは、保留中のレイアウトをすぐに実行する必要がないことを示しています。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright 2002-2008 DOBON!. All rights reserved.
|