2013-04-22 2 views
0

Мне нужно установить атрибут readOnly элементов управления формы (текстовые поля, переключатели и т. Д.) На readOnly = true или false на основе глобальной переменной.Получение всех элементов управления на странице

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

 For Each Ctrl In Me.Controls 
      Ctrl.ReadOnly = myGlobalTrueFalse 
     Next 

Но это не работает, потому что нет ReadOnly атрибута для каждого Ctrl.

Любые идеи?

Спасибо!

+1

Одним из лучших решений является размещение элементов управления, которые необходимо отключить в 'объекта Panel', а затем просто отключить' Panel'. –

ответ

2

Я думаю, вы просто должны проверить, если элемент управления имеет свойство, прежде чем пытаться присвоить ему значение.

For Each Ctrl In Me.Controls 
If Ctrl.ReadOnly Is Not Nothing Then 
    Ctrl.ReadOnly = myGlobalTrueFalse 
End If 
Next 

Это больше Ressources conssuming, чем просто положить все элементы управления, которые необходимо отключить в контейнере, как панели, отключить сам контейнер. (Что отключит все элементы управления в нем)

+0

Все мои элементы управления находятся в стандартной таблице HTML, которая находится внутри .net ContentPlaceHolder. Может ли одна из них работать как контейнер, где я мог бы только читать? -thanks – SkyeBoniwell

+0

Я ** действительно не ** ссылка, когда дело доходит до Интернета. Я займусь этим, дайте мне несколько минут. – phadaphunk

+0

Его нельзя просто «отключить». Лучшее, что я смог найти, - установить его видимость на false, но это тоже скроет содержимое. Есть ли шанс, что вы можете изменить конайнер? – phadaphunk

-2
Try 
    For Each Ctrl In Me.Controls 
     Ctrl.ReadOnly = myGlobalTrueFalse 
    Next 
Catch ex As Exception 

End Try 

Вот что я использую, когда это происходит

+1

-1. Не используйте шаблоны try catch для таких вещей. Если вы поймаете что-то, что хотите сделать что-то полезное, с ним не просто украсть исключение. – phadaphunk

+1

-1, По крайней мере, вы можете сделать это, чтобы попробовать внутри цикла, что, конечно, только немного меньше. – Behrooz

+0

@PhaDaPhunk Я использую Try, потому что он не остановится при ошибке. Работает на меня. –

1

См. Сначала ответы PhaDaPhunks.

Это был ЛЕТ, поскольку я написал любой код VB, но это должно быть сделано.
Вы можете добавить больше циклов.

For Each Ctrl In Me.Controls 
If Ctrl.ReadOnly Is Not Nothing Then 
    Ctrl.ReadOnly = myGlobalTrueFalse 
End If 
For Each Ctrl2 In Ctrl.Controls 
    If Ctrl2.ReadOnly Is Not Nothing Then 
    Ctrl2.ReadOnly = myGlobalTrueFalse 
    End If 
Next 
Next 
+0

Когда я смотрю на ваш код, я помню, почему я ** сильно ** предпочитаю синтаксис C#. – phadaphunk

+0

@PhaDaPhunk согласился, конечно, это абсолютно просто по сравнению с тем, что я использовал в VB6, когда мне было 12. – Behrooz

+1

Это пункт. Так много спама на экране для такой маленькой задачи ... 0_o – phadaphunk

1

Чтобы посетить все элементы управления, в том числе в контейнерах, используйте этот

Dim ctrl As Control = Me.GetNextControl(Me, True) 
    Do Until ctrl Is Nothing 
     'perform action here 
     ctrl = Me.GetNextControl(ctrl, True) 
    Loop 
Смежные вопросы