2011-11-07 8 views
2

TabControlを使用するフォームアプリケーションを作成しました。各タブごとに、他のすべてのコントロールを含む単一のUserControl(同じプロジェクトで作成されたもの)を配置します。しかし、イベント、メソッドなどでプロパティを処理するには、プライマリフォームからUserControlにいくつかの情報を渡す必要があります。どうすればいいですか?c#フォームプロジェクト:ユーザーコントロールに情報を渡す

パラメータでコンストラクタを作成しようとしましたが、Designerが失敗し、追加されたUserControlリファレンスを削除しなければなりません。

ありがとうございます!

+0

コンストラクタパラメータは正しい方法です。 (テストでの単純化のために、カスタムオブジェクトのパラメータを抽象化してインターフェイスにするのも理にかなっています)。 – sll

+0

「何らかの情報」とは何ですか? –

答えて

0

コンストラクタパラメータが正しいメソッドです。ただし、Designerがオブジェクトのコピーを作成(および描画)できるようにするには、デフォルトのコンストラクタが必要です。

私のいつもの回避策は、私たちは「デザインモード」になっていることを確認するためにチェックしない場合は例外をスロー、デフォルトコンストラクタで句を置くことです:

public class MyForm: Form 
{ 
    public MyForm() 
    { 
     if(!DesignMode) throw new InvalidOperationException("Cannot use default constructor in production code"); 
    } 

    public MyForm(MyDependency dependent) 
    { 
     ... 
    } 
} 
0

あなたはその機能によって情報を渡すことができますusercontrol.csファイルで作成されます。 usercontrol.cs

public string name; 
public void SetName(string pname) 
{ 
this.name = pname; 
} 

または多分あなたは今

Button mybutton = new Button(); 
public void SetButtonName(string btname) 
{ 
this.mybutton.Text = btname; 
} 

あなたmainform.csでこれらの関数を呼び出すことができ、ボタン名を変更したいにおける例えば

Myusercontrol usc = new Myusercontrol(); 
usc.SetName("this is string for 'name' string"); 
usc.SetButtonName("this is string for button text"); 
+0

プロパティはあなたの友人です... –

0

コンストラクタの作成を試みるだけでなく、デフォルトのパラメータのないコンストラクタを作成してください。

を参照してください。at this question

関連する問題