2016-12-21 11 views
-1

Dies ist einer der Form ist, alle Usercontrol-Wert in dieser Form in My.Settings Was ist der beste Weg, um dieses Programm zu wiederholen?

form

ich eine andere Form mit einem Flowlayoutpanel, jedes Mal, wenn die Anwendung starten, , wenn Active geprüft haben dann

gespeichert werden Es wird dem FlowLayoutPanel ein Button mit Rabatt hinzugefügt.

Sollte ich diese Benutzersteuerung zu einer Liste hinzufügen und dann die Liste durchlaufen? Oder was ist der beste Weg, um diese Art von Problem zu lösen?

AKTUALISIERT Wie kann ich mehrere Artikel zur Liste in-1-Code hinzufügen? Ich bekomme diese Fehlermeldung, wenn das System laufen 5

Eine Ausnahme des Typs ‚System.NullReferenceException‘ in XXX.exe aufgetreten Linie wurde aber in Benutzercode

Zusätzliche Informationen nicht behandelt: Objektverweis nicht auf eine Instanz von ein Objekt.

Public Sub RefreshDiscount(ByRef ref As scr_mainDiscount) 
    Dim li_disName As New List(Of TextBox) 
    Dim li_disValue As New List(Of TextBox) 
    Dim li_disType As New List(Of ComboBox) 
    Dim li_active As New List(Of CheckBox) 
    Dim tb_disName As TextBox() = {ref.tb_name1, ref.tb_name2, ref.tb_name3, ref.tb_name4, ref.tb_name5, ref.tb_name6, ref.tb_name7, ref.tb_name8, ref.tb_name9, ref.tb_name10} 
    Dim tb_disValue As TextBox() = {ref.tb_value1, ref.tb_value2, ref.tb_value3, ref.tb_value4, ref.tb_value5, ref.tb_value6, ref.tb_value7, ref.tb_value8, ref.tb_value9, ref.tb_value10} 
    Dim cb_disType As ComboBox() = {ref.cb_type1, ref.cb_type2, ref.cb_type3, ref.cb_type4, ref.cb_type5, ref.cb_type6, ref.cb_type7, ref.cb_type8, ref.cb_type9, ref.cb_type10} 
    Dim chkb_active As CheckBox() = {ref.CheckBox1, ref.CheckBox2, ref.CheckBox3, ref.CheckBox4, ref.CheckBox5, ref.CheckBox6, ref.CheckBox7, ref.CheckBox8, ref.CheckBox9, ref.CheckBox10} 

    li_disName.AddRange(tb_disName) 
    li_disValue.AddRange(tb_disValue) 
    li_disType.AddRange(cb_disType) 
    li_active.AddRange(chkb_active) 

    For index As Integer = 0 To li_active.Count - 1 
     If li_active(index).Checked = False Then 
      li_disName.RemoveAt(index) 
      li_disValue.RemoveAt(index) 
      li_disType.RemoveAt(index) 
      li_active.RemoveAt(index) 
     Else 
      Dim btn As New ctrl_DiscountButton 
      With btn 
       .Text = li_disName(index).Text 
       .Price = li_disValue(index).Text 
       .Type = li_disType(index).Text 
      End With 
      scr_sales.flp_discount.Controls.Add(btn) 
     End If 
    Next 

    li_disName.Clear() 
    li_disValue.Clear() 
    li_disType.Clear() 
    li_active.Clear() 
End Sub 
+2

Sie all dies durch Code erstellen kann. Fügen Sie sie in eine Liste ein oder verwenden Sie FindControl, beide Optionen sind gültig. –

+2

Was hast du eigentlich probiert? Ich weiß es zu schätzen, dass Sie neu in .NET sind, aber alle Ihre Fragen scheinen zu sein, als würden Sie nach Code fragen, der für Sie geschrieben wird. –

Antwort

0

Hier ist ein einfaches Beispiel zeigt, wie CheckBox1 durch CheckBox10 zu finden "namentlich", mit der "searchAllChildren" Option von Controls.Find():

For i As Integer = 1 To 10 
     Dim ctlName As String = "CheckBox" & i 
     Dim matches() As Control = Me.Controls.Find(ctlName, True) 
     If matches.Length > 0 AndAlso TypeOf matches(0) Is CheckBox Then 
      Dim cb As CheckBox = DirectCast(matches(0), CheckBox) 
      ' do something with "cb" 
      If cb.Checked Then 
       ' ... code ... 
       ' possibly use code just like this to find the matching discount value control? 
      End If 
     End If 
    Next 
Verwandte Themen