2015-01-14 3 views
2

У меня есть несколько элементов управления на странице, которые все схожи и пронумерованы. Например, у меня есть несколько элементов управления в месяц, как это:Цитирование через разные выпадающие списки

  • Replacement1MonthDropDownList
  • Replacement2MonthDropDownList
  • Replacement3MonthDropDownList
  • И т.д.

Но когда у меня есть общий код, который работает на всех контролей , Мне нужен большой оператор Select Case:

Select Case Count 
    Case 1 
     Call Me.FillReplacements(rf.Replacements(0), Me.Replacement1MonthDropDownList, Me.Replacement1AmountTextBox, Me.ReplacementSaveButton) 
    Case 2 
     Call Me.FillReplacements(rf.Replacements(0), Me.Replacement1MonthDropDownList, Me.Replacement1AmountTextBox, Me.ReplacementSaveButton) 
     Call Me.FillReplacements(rf.Replacements(1), Me.Replacement2MonthDropDownList, Me.Replacement2AmountTextBox, Me.SplitButton1) 

Можно ли прокручивать элементы управления и получать их по имени - просто изменяя числа в имени с текущим Count в моем цикле?

Извините, я очень новичок в Visual Basic! : S

ответ

2

Да, вы можете. Класс Page (Me, в данном случае) имеет метод FindControl, который позволяет вам найти элемент управления по имени. Так, например, вы могли бы сделать что-то вроде этого:

Dim monthControl As Control = Me.FindControl("Replacement" & Count.ToString() & "MonthDropDownList") 
Dim splitControl As Control = Me.FindControl("SplitButton" & Count.ToString()) 

Если вам нужно, чтобы бросить их в качестве более конкретного типа, вы могли бы использовать DirectCast. Например:

Dim monthControl As DropDownList = DirectCast(Me.FindControl("Replacement" & Count.ToString() & "MonthDropDownList"), DropDownList) 

В качестве альтернативы, возможно, вы можете создать массив элементов управления, чтобы вы могли получить к ним доступ по индексу. Например, если у вас массив, как это определено:

Private monthControls() As DropDownList = {Replacement1MonthDropDownList, Replacement2MonthDropDownList, Replacement3MonthDropDownList} 

Тогда вы могли бы получить доступ к этому индексу, как это:

Dim currentMonthControl As DropDownList = monthControls(Count) 
Смежные вопросы