2012-11-19 2 views
0

У меня есть 44 текстовых поля на экране (точнее, RadNumericTextBoxes, но это не является родным). Они следуют общему шаблону именования (rntb_ [NameOfDBField]), который не может быть программно реплицирован.Итерация над текстовыми полями, не указанными последовательно

Как установить .Value на номер Nothing для каждого элемента управления, который имеет имя^= rntb_? Я пробовал следующее:

Private Sub ClearValues() 
    For Each c as Control in Controls 
     If TypeOf c Is RadNumericTextBox Then 
      TryCast(c, RadNumericTextBox).Value = Nothing 
     End If 
    Next 
End Sub 

Однако Controls.Count = 1 и содержит только имя главной страницы.

Нужно ли передавать аргумент элементам управления или мне нужно вообще что-то делать? Это «всего» 44 текстовых блока, поэтому я могу очистить каждый из них вручную, но я предпочел бы делать это программно, если это возможно.

ответ

1

Если RadNumericTextBoxes находятся на форме, а не в контейнере, а затем что-то вдоль линий

Private Sub ClearValues() 
    For Each c As Control In Me.Controls 
     If TypeOf c Is RadNumericTextBox Then 
      Dim rntb = DirectCast(c, RadNumericTextBox) 
      If rntb.Name.StartsWith("rntb_") Then 
       rntb.Value = Nothing 
      End If 
     End If 
    Next 
End Sub 

Но если они, скажем, GroupBox1, то вы бы заменить Me.Controls в выше с GroupBox1.Controls.

А что такое End For в вашем коде? A For..Next loop имеет Next в конце своего тела в VB.NET.

+0

Извините, была опечатка (не была прямая копия и вставка); Я исправил это. Ваш пример возвращает то же самое, а Me.Controls.Count = 1 –

+0

@pcopley Являются ли RNTB внутри элемента управления контейнера, например GroupBox или Panel? someControl.Controls возвращает только прямые элементы управления потомками someControl. –

Смежные вопросы