2016-07-13 4 views
-1

Я использую VisualStudio 2008 в системе с использованием .NET Compact Framework 3.5 в VB.NET и имею форму, содержащую пару Компонентов, а именно Таймеры и Messageboxes. Часть моего приложения - это подразделение, которое выполняет итерацию через все элементы управления в форме и настраивает такие свойства, как Front или BackColor, чтобы мы могли перепроверить все приложение по требованию.Как выполнить итерацию через компоненты в форме Windows?

Хотя я итерации через эти элементы управления, я также хотел бы перебирать компоненты и устанавливать некоторые свойства Messageboxes в форме. Я попытался использовать для каждого для доступа к Me.components.Components, но эта коллекция кажется частной.

For Each comp As Object in Me.components 
    <do something> 
Next comp 

Есть ли способ для итерации компонентов?

EDIT:

Я был неправ, думая, что me.components.Component является частным. Использование Me.components.Components я получаю следующее сообщение об ошибке:

'Components' is not a member of 'System.ComponentModel.IContainer".

+0

Символ 'MessageBox' не является компонентом, ни управления. Это диалоговое окно создается только при вызове' MessageBox.Show() '. Скорее всего, вы не сможете найти его с помощью .NET-кода. Это скорее потребует выполнения функции Inv Invocation, например, функции «EnumWindows()» WinAPI. –

+0

После небольшой обработки я обнаружил, что в Compact Framework компоненты фактически не связаны с они все еще можно найти в другом месте, см. эти два ответа: [** \ [1 \] **] (http://stackoverflow.com/a/14628749/3740093) [** \ [2 \ ] **] (http://stackoverflow.com/a/371829/3740093). –

ответ

0

Вы можете цикл Повсеместно таймеры с этим: ....

For Each c As Object In Me.components.Components 
     If TypeOf c Is Timer Then 
      Dim tim As Timer = CType(c, System.Windows.Forms.Timer) 
      tim.Interval = 12345 
     End If 
    Next 

.Interval = 12345 Команда смены с anithing вы хотите сделать с таймерами.

.... А через другие элементы управления с:

For Each ctrl As Control In Me.Controls 
     If (ctrl.GetType() Is GetType(TextBox)) Then 
      Dim txt As TextBox = CType(ctrl, TextBox) 
      txt.BackColor = Color.LightYellow 
     End If 
    Next 

Измените TextBox с типом управления

.BackColor = Color.LightYellow И все, что вы хотите сделать с контролем.

Unfortunatly я не знаю, как сделать это с MesseageBoxes :(

+0

'Я пробовал использовать для каждого для доступа к Me.components.Components, но эта коллекция представляется частным. '\ * Ahem \ * \ * ahem \ *? :) –

+0

'Me.components' является частным. 'Me.components.Components' - нет. И если это не сработает, второе сделает. – BanForFun

+0

... только то, что ваш второй код не принимает компонентов. Я просто спрашиваю, потому что я пишу с телефона, поэтому ничего не могу проверить. В любом случае, 'Me.components' может быть приватным, но поскольку' Me' является формой, нет проблем с доступом к нему (как вы говорите). :) –

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