2009-08-24 8 views
0

J'ai une variable publique "testStr" dans le formulaire principal de mon application. J'ai un tabControl qui ajoute des onglets chargés avec les contrôles utilisateur. Comment puis-je référencer "testStr" de ces contrôles utilisateur? J'imagine son soit Application. * Ou parentForm. * ... mais tout ce que j'essaie ne fonctionne pas, pas vraiment sûr de la façon de le faire et je suis un peu nouveau pour .net ... dans flex constructeur je ferais quelque chose comme parentApplication.testStr.Variable d'application des formulaires de référence.

Toute aide serait appréciée ... Je suis sûr que c'est assez basique et simple à faire.

Répondre

1

Qu'en est-il stocker des informations comme testStr (et tout ce qui est lié) dans sa propre classe et de partager une référence à toutes les autres classes qui doit l'utiliser? Votre MainForm va donc créer une instance de cette nouvelle classe et transmettre une référence à chaque UserControl au fur et à mesure de leur création. De cette façon, les UserControls n'ont pas besoin de savoir quoi que ce soit à propos de MainForm, ils ne connaissent que les données avec lesquelles ils travaillent. Cela facilitera également les choses si vous modifiez la mise en page de l'application. En supposant toujours que le parent a un niveau au-dessus ou que le parent du plus haut niveau est le Formulaire que vous voulez, il n'est pas très amical.

0

Si le contrôle onglet est directement dans le formulaire de niveau supérieur, puis

((this.Parent) as MyForm).testStr 

Sinon, vous pourriez avoir besoin de continuer à prendre. Parent jusqu'à ce que vous atteigniez le haut de la pile, puis le transtypage vers le type de formulaire.

Vous pouvez également

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

Je ne connaissais pas avant que l'on ...

1

Vous pouvez enregistrer une référence à votre instance de formulaire dans une variable statique. Par exemple, vous pouvez modifier Program.cs:

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

Ensuite, vous pouvez référencer le testStr avec Program.MainForm.testStr.

0

Vous pouvez itérer vers le haut pour obtenir la valeur:

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; 
    } 
} 

Ou, si la valeur est la même dans tous les cas, déclarerons comme const, ou un champ readonly statique, ou comme un champ statique normale :

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

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