2016-07-13 5 views
-1

J'utilise VisualStudio 2008 sur un système utilisant .NET Compact Framework 3.5 dans VB.NET et j'ai un formulaire qui contient deux composants, à savoir les minuteurs et les boîtes de message. Une partie de mon application est un sous-système qui parcourt tous les contrôles du formulaire et ajuste les propriétés telles que Front ou BackColor afin que nous puissions rescanner toute l'application à la demande.Comment parcourir des composants sur un formulaire Windows?

Pendant que j'écrit à travers ces commandes, je voudrais également parcourir les composants et définir certaines propriétés des boîtes de message sur le formulaire. J'ai essayé d'utiliser un For Each pour accéder à Me.components.Components mais cette collection semble être privée.

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

Existe-t-il un moyen de parcourir les composants?

EDIT:

J'ai eu tort de penser que me.components.Component est privé. En utilisant Me.components.Components je reçois l'erreur suivante:

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

+0

A 'MessageBox' ne fait pas partie, ni un contrôle. Il est une boîte de dialogue créé que lorsque vous appelez' MessageBox.Show() '. Vous ne pouvez probablement pas le trouver en utilisant le code .NET Il faudrait plutôt exécuter l'invocation de la plate-forme sur la fonction 'EnumWindows()' de WinAPI par exemple –

+0

Après avoir creusé un peu j'ai trouvé que dans le Compact Framework les composants ne sont pas réellement liés le formulaire lui-même.Ils peuvent encore être trouvés ailleurs, voir ces deux réponses: [** \ [1 \] **] (http://stackoverflow.com/a/14628749/3740093) [** \ [2 \ ] **] (http://stackoverflow.com/a/371829/3740093) –

Répondre

0

Vous pouvez boucle throught minuteries avec ceci: ....

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 

Changer le .Interval = 12345 avec anithing que vous voulez faire des minuteries.

.... Et grâce à d'autres contrôles avec:

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 

Changez le TextBox avec le type de contrôle

Et .BackColor = Color.LightYellow avec tout ce que vous voulez faire avec le contrôle.

Malheureusement je ne sais pas comment faire est avec MesseageBoxes :(

+0

'J'ai essayé d'utiliser For Each pour accéder à Me.components.Components mais cette collection semble être privé. »\ * Ahem \ * \ * ahem \ *? :) –

+0

'Me.components' est privé. 'Me.components.Components' ne l'est pas. Et si ça ne marche pas, la seconde le fait. – BanForFun

+0

... seulement que votre deuxième code ne prend pas les composants. Je demande juste parce que j'écris de mon téléphone, ainsi je ne peux rien tester. Quoi qu'il en soit, 'Me.components' peut être privé mais comme' Me' est le formulaire, il n'y a aucun problème pour y accéder (comme vous le dites). :) –