2009-08-24 9 views
0

Ich habe eine öffentliche Variable "TestStr" in meiner Anwendung Hauptformular. Ich habe eine RegisterkarteControl, die Registerkarten hinzugefügt mit Benutzersteuerelementen geladen. Wie kann ich "testStr" von diesen Benutzersteuerelementen referenzieren? Ich könnte mir vorstellen, dass es entweder Application. * Oder elderForm. * ... aber alles, was ich versuche funktioniert nicht, nicht wirklich sicher, wie es geht, und ich bin ein bisschen neu für .net ... in Flex Builder würde ich tun etwas wie parentApplication.testStr..Net Referenz Formulare Anwendungsvariable

Jede Hilfe würde geschätzt werden ... Ich bin sicher, es ist ziemlich einfach und einfach zu tun.

Antwort

1

Was Informationen wie testStr über die Speicherung (und alles andere, die in engem Zusammenhang steht) in seiner eigenen Klasse und einen Verweis auf jede andere Klasse zu teilen, die sie verwenden muss?

So wird Ihre MainForm eine Instanz dieser neuen Klasse erstellen und eine Referenz an jedes Benutzersteuerelement übergeben, wie sie erstellt werden. Auf diese Weise müssen die UserControls nichts über MainForm wissen, sie wissen nur über die Daten, mit denen sie arbeiten. Es wird auch die Dinge erleichtern, wenn Sie das Layout der App ändern. Immer vorausgesetzt, dass die übergeordnete Ebene eine Ebene höher oder die oberste Ebene übergeordnet ist, ist die gewünschte Form nicht sehr benutzerfreundlich.

0

Wenn die Steuerzunge direkt in der Top-Level-Formular ist dann

((this.Parent) as MyForm).testStr 

Andernfalls müssen Sie nehmen zu halten. Parent bis Sie den Anfang des Stapels erreichen und dann zum Formulartyp wechseln.

Alternativ

((this.FindForm()) as MyForm).testStr 

ich, dass man vorher nicht gekannt hatte ...

1

Sie einen Verweis auf Ihre Formularinstanz in einigen statischen Variablen speichern können. Zum Beispiel könnten Sie Program.cs bearbeiten:

class Program { 
    public static MyForm MainForm { get; private set; } 
    static void Main() { 
     // ... 
     Application.Run(MainForm = new MyForm()); 
     // ... 
    } 
} 

Dann Sie die testStr mit Program.MainForm.testStr verweisen konnte.

0

Sie könnten iterieren nach oben um den Wert zu erhalten:

class MyControl : UserControl 
{ 
    public string GetMyStr() 
    { 
     for (Control c = this.Parent; c != null; c = c.Parent) 
     { 
     if (c is MyForm) 
     { 
      return c.testStr; // I recommend using a property instead 
     } 
     } 
     return null; 
    } 
} 

Oder, wenn der Wert das gleiche in allen Fällen ist, erklären sie als const oder ein statisches Nur-Lese-Feld oder als normales statisches Feld :

class MyForm 
    { 
     public static const string TESTSTR = "..."; 
    } 

    class MyControl : UserControl 
    { 
     public void DoSomething() 
     { 
     string s = MyForm.TESTSTR; 
     } 
    } 
Verwandte Themen