トップ  >  サンプルソース  >  WithEvents配列(C#/VB.NET)

WithEvents配列(C#/VB.NET)

2012年05月25日

WithEvents配列を定義したら「'WithEvents' 変数を配列として型指定することはできません」というエラーになります。

WithEvents配列を実現するための裏技は無いものでしょうか。

そこで、、、
コントロール配列を例にWithEvents配列の実現方法を考えてみました。

' ----------------------------------------------------------
' コントロール配列(WithEvents配列)を実現する(VB.NET/VS2005)
' Buttonコントロール配列を定義する
Private BtnAray As Class1() = New Class1(1) {}

' フォーム・ロード
Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
    ' Button配列(0)の設定
    BtnAray(0) = New Class1()
    BtnAray(0).BtnObj.Location = _
        New System.Drawing.Point(12, 12 + (35 * 0))
    BtnAray(0).BtnObj.Size = _
        New System.Drawing.Size(134, 34)
    BtnAray(0).BtnObj.UseVisualStyleBackColor = True
    BtnAray(0).BtnObj.Text = "Button(0)"
    Me.Controls.Add(BtnAray(0).BtnObj)

    ' Button配列(1)の設定
    BtnAray(1) = New Class1()
    BtnAray(1).BtnObj.Location = _
        New System.Drawing.Point(12, 12 + (35 * 1))
    BtnAray(1).BtnObj.Size = _
        New System.Drawing.Size(134, 34)
    BtnAray(1).BtnObj.UseVisualStyleBackColor = True
    BtnAray(1).BtnObj.Text = "Button(1)"
    Me.Controls.Add(BtnAray(1).BtnObj)
End Sub

' コントロール配列(WithEvents配列)を実現するためのクラス
Public Class Class1
    ' Buttonコントロールの定義
    ' WithEvents変数を配列として型指定することはできません
    Friend WithEvents BtnObj As _
        System.Windows.Forms.Button = _
        New System.Windows.Forms.Button()

    ' Buttonクリック・イベント
    Private Sub MyBtn_Click( _
    ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles BtnObj.Click
        ' ButtonのTextをメッセージ表示
        Dim btn As System.Windows.Forms.Button = sender
        System.Diagnostics.Trace.WriteLine( _
            btn.Text & "が押されました")
    End Sub
End Class
' ----------------------------------------------------------

// ---------------------------------------------------------
// コントロール配列(WithEvents配列)を実現する(C#.NET/VS2005)
// Buttonコントロール配列を定義する
private Class1[] BtnAray = new Class1[2];

// フォーム・ロード
private void Form1_Load(object sender, EventArgs e)
{
    // Button配列[0]の設定
    BtnAray[0] = new Class1();
    BtnAray[0].BtnObj.Location =
        new System.Drawing.Point(12, 12 + (35 * 0));
    BtnAray[0].BtnObj.Size =
        new System.Drawing.Size(105, 36);
    BtnAray[0].BtnObj.Text = "button[0])";
    BtnAray[0].BtnObj.UseVisualStyleBackColor = true;
    this.Controls.Add(BtnAray[0].BtnObj);

    // Button配列[1]の設定
    BtnAray[1] = new Class1();
    BtnAray[1].BtnObj.Location =
        new System.Drawing.Point(12, 12 + (35 * 1));
    BtnAray[1].BtnObj.Size =
        new System.Drawing.Size(105, 36);
    BtnAray[1].BtnObj.Text = "button[1]";
    BtnAray[1].BtnObj.UseVisualStyleBackColor = true;
    this.Controls.Add(BtnAray[1].BtnObj);
}

// コントロール配列を実現するためのクラス
public class Class1
{
    // Buttonコントロールの定義
    public System.Windows.Forms.Button BtnObj =
        new System.Windows.Forms.Button();

    // コンストラクタ
    public Class1()
    {
        // Buttonクリック・イベント追加
        BtnObj.Click +=
            new System.EventHandler(this.MyBtn_Click);
    }

    // Buttonクリック・イベント
    private void MyBtn_Click(object sender, EventArgs e)
    {
        // ButtonのTextをメッセージ表示
        System.Windows.Forms.Button btn =
            (System.Windows.Forms.Button)sender;
        System.Diagnostics.Trace.WriteLine(
            btn.Text + "が押されました");
    }
}
// ---------------------------------------------------------
スポンサーサイト

ウイルスセキュリティZEROの推奨対策案? | トップページへ戻る | Windows Update(自動更新) 無限ループ停止

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る