2016-12-21 4 views
-1

Это одна из форм, все значения UserControl в таком виде будет храниться в My.SettingsКаков наилучший способ для этой программы?

form

У меня есть другая форма с FlowLayoutPanel, каждый раз, когда запуск приложения, если Активный проверено затем он добавит Button с дисконтным значением в FlowLayoutPanel.

Должен ли я добавить эти usercontrol в список, а затем прокрутить список? Или как лучше всего решить эту проблему?

ОБНОВЛЕНО

Как я могу добавить несколько элемент в список в 1 коде? Я получаю эту ошибку, когда система запуска на линию 5

исключение типа «System.NullReferenceException» произошло в xxx.exe, но не был обработан в пользовательском коде

Дополнительная информация: Ссылка на объект не указывает на экземпляр объект.

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

Вы можете создать все это с помощью кода. Добавьте их в список или используйте FindControl, оба параметра действительны. –

+2

Что вы на самом деле пытались? Я ценю, что вы новичок в .NET, но все ваши вопросы, похоже, сродни просьбе написать код для вас. –

ответ

0

Вот простой пример, показывающий, как найти CheckBox1 через CheckBox10, «по имени», используя опцию «searchAllChildren» из 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 
Смежные вопросы