1

ツリービューの各ノードをクリックして新しいパネルを生成したいと考えています。ただし、この新しく生成された各パネルには同じチェックボックスがあります。さらに、これらのチェック ボックスは、チェックされた状態のグループ ボックスにリンクされています。

ノードごとにパネルを追加することで、4 ~ 5 ノードでこれを行うことができます。しかし、私はそのようなノードを約90個持っています。次の画像を参照してください Node1 が選択されており、チェック ボックスがクリックされている Node2 が選択されています 。このようなノードは 90 個あります。

これを達成するためのループなどの簡単な方法はありますか? または難しい方法 (各ノードにパネルを追加し、表示/非表示を使用する) が唯一の方法ですか?

助けていただければ幸いです。

乾杯、

4

1 に答える 1

-1

これにはループを使用できます。

これはサンプルです:

まず、いくつかのグローバル変数を定義する必要があります。

Dim Panels(100) As Panel
Dim CheckBox1(100) As CheckBox
Dim CheckBox2(100) As CheckBox
Dim CheckBox3(100) As CheckBox
Dim Label1(100) As Label

Form_Load()次に、イベントのコントロールを初期化する必要があります。

For i As Integer = 0 To 100

    'Initialize Controls
    Panels(i) = New Panel()
    CheckBox1(i) = New CheckBox()
    CheckBox2(i) = New CheckBox()
    CheckBox3(i) = New CheckBox()
    Label1(i) = New Label()

    'Set properties
    CheckBox1.Left = 100
    CheckBox2.Left = 100
    CheckBox3.Left = 100
    CheckBox1.Top = 100
    CheckBox2.Top = 200
    CheckBox3.Top = 300
    Label1.Left = 100
    Label1.Top = 50
    Label1.Text = "ID : " & NodeNames(i) 'You should replace NodeNames(i) with a variable that you are using for the name of nodes.

    'Add Controls to panel
    Panels(i).Controls.Add(CheckBox1(i))
    Panels(i).Controls.Add(CheckBox2(i))
    Panels(i).Controls.Add(CheckBox3(i))
    Panels(i).Controls.Add(Label1(i))

    'Set visiblity of panel to false
    Panels(i).Visible = False

    'Add panel to the form.
    Me.Controls.Add(Panels(i))       
Next

パネルを表示する必要がある場合は、次のようにします。

Panels(i).BringToFront()
Panels(i).Visible = True

しかし、RAM に多くのパネルを配置することはあまり良い考えではありません。パネルを 1 つだけ使用し、ノードごとにコードで変更することをお勧めします。内部に多数のパネルと多数のコントロールがある場合、アプリケーションは大量の RAM を使用する可能性があるためです。

于 2012-07-25T10:31:57.043 に答える