2016-07-13 85 views
-1

Ich verwende VisualStudio 2008 auf einem System mit .NET Compact Framework 3.5 in VB.NET und habe ein Formular, das ein paar Komponenten enthält, nämlich Timer und Messageboxen. Teil meiner Anwendung ist ein Sub, das alle Steuerelemente im Formular durchläuft und Eigenschaften wie Front oder BackColor anpasst, sodass wir die gesamte Anwendung bei Bedarf neu skalieren können.Wie durchläuft ich Komponenten in einem Windows Form?

Während ich durch diese Kontrollen Iteriere, möchte ich auch die Komponenten durchlaufen und einige Eigenschaften der Messageboxen auf dem Formular festlegen. Ich habe versucht, mit einem For Each auf Me.components.Components zuzugreifen, aber diese Sammlung scheint privat zu sein.

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

Gibt es eine Möglichkeit, die Komponenten zu durchlaufen?

EDIT:

ich war falsch denken, dass me.components.Component privat ist. Mit Me.components.Components bekomme ich folgende Fehlermeldung:

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

+0

A 'MessageBox' ist nicht Bestandteil noch eine Kontrolle. Es ist ein Dialog nur dann erstellt, wenn Sie anrufen' MessageBox.Show() '. Sie können es wahrscheinlich nicht mit .NET-Code finden, sondern mit Platform Invocation, zum Beispiel mit der 'EnumWindows()' -Funktion von WinAPI –

+0

Nach ein wenig Graben habe ich festgestellt, dass die Komponenten im Compact Framework eigentlich nicht verwandt sind das Formular selbst. Sie können immer noch woanders gefunden werden, siehe diese zwei Antworten: [** \ [1 \] **] (http://stackoverflow.com/a/14628749/3740093) [** \ [2 \ ] **] (http://stackoverflow.com/a/371829/3740093). –

Antwort

0

Sie können Schleife Throught Timer mit diesem: ....

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 

Ändern Sie den .Interval = 12345 mit anithing Sie den Timer tun möchten.

.... Und durch andere Steuerelemente mit:

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 

ändern Sie die TextBox mit der Art der Steuerung

Und .BackColor = Color.LightYellow mit allem, was Sie mit der Steuerung tun mögen.

Leider weiß ich nicht, wie man mit MesseageBoxes tun :(

+0

'Ich habe versucht, ein For Each zu verwenden, um auf Me.components.Components aber diese Auflistung zuzugreifen scheint privat zu sein. \ * Ahem \ * \ * ahem \ *? :) –

+0

'Me.components' ist privat. 'Me.components.Components' ist nicht. Und wenn das nicht funktioniert, tut das zweite. – BanForFun

+0

... nur, dass der zweite Code keine Komponenten enthält. Ich frage nur, weil ich von meinem Handy aus schreibe, also kann ich nichts testen. Wie auch immer, "Me.components" ist möglicherweise privat, aber da "Ich" das Formular ist, gibt es kein Problem beim Zugriff darauf (wie Sie sagen). :) –