/ / Wygeneruj nowy panel zawierający te same pola wyboru dla każdego węzła w widoku drzewa VB.NET (obrazy dołączone) - vb.net, widok drzewa, panel

Wygeneruj nowy panel zawierający te same pola wyboru dla każdego węzła w widoku drzewa VB.NET (obrazy dołączone) - vb.net, widok drzewa, panel

Chcę wygenerować nowy panel za pomocą kliknięciakażdy węzeł w widoku drzewa. Ale każdy nowo wygenerowany panel będzie miał te same pola wyboru. Ponadto te pola wyboru są połączone z grupami z zaznaczonymi warunkami.

Mogę to zrobić dla 4-5 węzłów, dodając panel dla każdego węzła. Ale mam około 90 takich węzłów. Prosimy o zapoznanie się z poniższymi obrazkami, Wybrano węzeł 1 i kliknięto pole wyboru Wybrano węzeł2 istnieje 90 takich węzłów.

Czy jest jakiś łatwiejszy sposób, taki jak pętla itp., Aby to osiągnąć? lub twardo (dodaj panel dla każdego węzła i użyj opcji pokaż / ukryj) to jedyny sposób?

Pomoc zostanie doceniona.

Twoje zdrowie,

Odpowiedzi:

-1 dla odpowiedzi nr 1

Możesz użyć do tego pętli.

To jest próbka:

Najpierw musisz zdefiniować niektóre zmienne globalne:

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

Następnie powinieneś zainicjować kontrole Form_Load() zdarzenie:

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

A kiedy musisz pokazać panel, powinieneś to zrobić:

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

Ale posiadanie wielu paneli w pamięci RAM nie jest tak dobrepomysł. Proponuję użyć tylko jednego panelu i zmodyfikuj go według kodu dla każdego węzła. Ponieważ jeśli masz w nim wiele paneli i wiele elementów sterujących, aplikacja może korzystać z dużej ilości pamięci RAM.