2010-09-30 5 views
2

У меня есть пользовательский элемент управления с 5 простыми радиообменами, мне нужно, чтобы петля прошла через те, что были в коде, но я рисую огромный пробел о том, как это сделать. Может кто-то помочь, пожалуйстаLoop через элементы управления UserControl

+0

Можете ли вы разместить разметку пользовательского элемента управления и как вы определили переключатели? – Oded

ответ

10
foreach (var ctl in this.Controls) 
{ 
    if (ctl is RadioButton) 
    { 
     // stuff 
    } 
} 

Обратите внимание, что это не рекурсивным. Если ваши радиолюбители находятся дальше в иерархии контейнера управления, вам нужно написать рекурсивный метод, чтобы найти их. См. Мой старый ответ here на примере рекурсивной функции FindControl.

+0

Вы не можете использовать «this.Controls» в пользовательском элементе управления – mattgcon

+0

Исправление, вы можете «это», но не вне любых методов. Я пытаюсь установить свойство, как в (get; set;) – mattgcon

0

Просто угадайте здесь, но если вы пытаетесь создать группу связанных переключателей, вы не должны использовать отдельные элементы управления радиокнопками, а элемент управления RadioButtonList. Это будет содержать все переключатели в группе и позволит вам перебирать их.

+0

Я использую его таким образом специально из-за запроса клиента. Я предпочитаю radioobuttonlist, но для того, чтобы метки были сверху кнопок. – mattgcon

+0

Используйте CSS для размещения надписей сверху. – TheGeekYouNeed

+0

Теперь я попытался использовать CSS, чтобы разместить их, но я не мог заставить его работать. – mattgcon

0

Это может быть немного поздно для вашего случая, но это сообщение помогло мне найти решение для вашего вопроса (который оказался моим точным вопросом) - в частности, как выбрать группу переключателей в пользовательском контроле в который не требует изменения кода, если группа переключателей изменяется. Вот решение, которое я придумал:

Protected Function GetRadioButtonGroup(ByVal control As Control, ByVal groupName As String) As RadioButton() 
    Dim rbList As New System.Collections.Generic.List(Of RadioButton) 
    If TypeOf control Is RadioButton AndAlso DirectCast(control, RadioButton).GroupName = groupName Then 
     rbList.Add(control) 
    End If 
    If control.HasControls Then 
     For Each subcontrol As Control In control.Controls 
      rbList.AddRange(GetRadioButtonGroup(subcontrol, groupName)) 
     Next 
    End If 
    Return rbList.ToArray 
End Function 

Тогда все, что вам нужно сделать, это получить радиокнопки в группе (и никакие другие элементы управления):

Dim radioButtons As RadioButton() = GetRadioButtonGroup(Me, "MyGroupName") 

Извините, но " Использовать RadioButtonList "не является хорошим решением для модификации существующего кода, который написал кто-то другой, так как он потребует значительных изменений в разметке и css. Конечно, если я нахожу себя собственным контролем, я буду использовать RadioButtonList.

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