2009-08-24 19 views
0

私のアプリケーションのメインフォームに "testStr"というパブリック変数があります。私はタブを追加するtabControlを持っています。これらのユーザーコントロールから「testStr」をどのように参照できますか?私はそのアプリケーション*またはparentFormを想像するだろう。* ...しかし、私は努力していない、本当にそれをやる方法がわからない、私はちょっと新しい.net ...フレックスビルダーでやるだろうparentApplication.testStrのようなものです。.Net参照フォームアプリケーション変数

何か助けていただければ幸いです...私はその基本的で簡単なことは確信しています。

答えて

1

何独自のクラスでtestStr(および関連だ何か)のような情報を格納し、それを使用する必要がある他のすべてのクラスへの参照を共有してはどうですか?

したがって、メインフォームはこの新しいクラスのインスタンスを作成し、作成されるごとに各UserControlへの参照を渡します。そうすることで、UserControlsはMainFormについて何も知る必要はなく、単に彼らが扱うデータについて知っているだけです。また、アプリのレイアウトを変更した方が簡単になります。常に親の1つ上のレベルまたは最上位の親を想定しているフォームはあまり変わりません。

0

タブコントロールは、その後

((this.Parent) as MyForm).testStr 

トップレベルのフォーム内に直接であればそうでない場合は、あなたが撮影を維持する必要がある場合があります。 Parentスタックの一番上に到達するまで、フォームの種類にキャストします。

また

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

私はその前に1について知られていなかった...

1

あなたは、いくつかの静的変数にフォームのインスタンスへの参照を保存することができます。たとえば、あなたはProgram.csを編集することができます:

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

その後、あなたはProgram.MainForm.testStrtestStrを参照することができます。

0

あなたが値を取得するために上向きに反復することができます:

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

をあるいは、値がすべてのインスタンスで同じであれば、CONST、または静的読み取り専用フィールドとして、または通常の静的フィールドとして宣言:

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

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