3

コントロールを動的に作成し、それ自体でイベント ハンドラーを追加するフォームがあります (その部分は既にコード化されています)。今のところ、コントロールをループして名前で検索するオブジェクト リストを含む非表示のテーブルがあります (Me.Controls コレクションを使用)。しかし、動的に作成されたコントロールに特別な一意のコードがあるかどうかを知っている人はいますか?

あると思いますが、わかりません……。

どんな助けでも大歓迎です!

ドロン。

4

3 に答える 3

1

すべてのコントロールには、Handle固有でなければならないプロパティがあります。それをさらに制御したい場合 (駄洒落を許してください)、Tag各コントロールのプロパティを新しい GUID に設定できます。次に、それを使用してそれらを一意に識別できます。

Dim dynamicControl As Control = ...
dynamicControl.Tag = Guid.NewGuid().ToString()

Nameただし、コントロールを一意に識別する通常の方法であるため、プロパティに使用している値がまだ一意ではない理由がわかりません。

于 2012-06-15T13:13:12.400 に答える
0

カスタム コントロールを使用している場合、これはかなり簡単に実行できますが、組み込みのコントロール (ラベル、ボタン、テキスト ボックスなど) を使用している場合は、少しトリッキーになります。

私は似たようなことをしているがここでカスタムコントロールを使用している誰かのために、このような質問に答えました.

組み込みコントロールの場合、いくつかのことができます。Steven Doggart が言及したように Tag プロパティに値を設定するか、使用するコントロールを継承する独自のカスタム クラスを作成し、必要な識別プロパティを追加することができます。

ID を格納する方法を選択すると、実際にMe.Controlsコレクションで LINQ を使用して、タイプ/タグ/その他によってすべてのコントロールを取得できます。そうは言っても、フォーム上の個々のコントロールに簡単にアクセスできる/予測可能な一意の識別子が与えられているとは思いません。特定のコントロールを具体的に参照したい場合は、実行時に想定できる識別子を与える必要があります。そうしないと、あなたを含む誰も、どのコントロールを操作する必要があるかを正確に知ることができません。

于 2012-06-15T14:07:58.757 に答える
0

作成時に Control.Name プロパティを設定していると思いますか?
あなたはControl.Handleの後にいるかもしれません?

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' create controls
        For i As Integer = 1 To 5
            Dim t As New TextBox
            t.Name = "TextBox" & i
            Me.Controls.Add(t)
        Next

        ' list controls
        For Each c As Control In Me.Controls
            Debug.Print(c.Name & " has handle " & c.Handle.ToString)
        Next

        ' check fopr existence of controls
        For i As Integer = 0 To 7
            If Me.Controls.ContainsKey("TextBox" & i) Then
                Debug.Print("TextBox" & i & " exists")
            Else
                Debug.Print("TextBox" & i & " doesn't exist")
            End If
        Next

    End Sub
End Class

このプログラムは、次の出力を作成します。

TextBox1 has handle 2361834
TextBox2 has handle 3739570
TextBox3 has handle 8130020
TextBox4 has handle 5048814
TextBox5 has handle 6425036
TextBox0 doesn't exist
TextBox1 exists
TextBox2 exists
TextBox3 exists
TextBox4 exists
TextBox5 exists
TextBox6 doesn't exist
TextBox7 doesn't exist
于 2013-02-14T22:10:53.527 に答える