2010-12-16 13 views
0

リストボックスにアクセスして、ランタイムに動的に作成されたカスタムコントロールのアイテムをアイテムに追加したいとします。カスタムコントロールのボタンの場所を押したときに項目を追加したいが、機能しません。私は仕事に次のコードを使用していますカスタムコントロールからフォームのコントロールにアクセスする

private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 frm = new Form1(); 
     frm.ABC = "HI"; 
    } 

「ABC」のフォームすなわち上の公共の文字列です:

public string ABC 
    { 
     set { listBox1.Items.Add (value); } 
    } 

私はそれを使用する時には、上記の文字列が正常に動作上のボタンを形成しますフォームに追加し、lsitboxの値を追加しますが、カスタムコントロールのボタンのフォームを使用して '値'のテキストが変更されますが、リストボックスに項目が追加されません。 ListBox1のModifireをPrivateからPublicに変更しますが、動作しません。上記の関数はフォームでうまく動作しますが、カスタムコントロールからは機能しません。

ありがとうございました。

答えて

-1

最も簡単な方法は、カスタムコントロールからフォームにコンストラクタでアクセスできるように、カスタムコントロールにフォームを渡すことです。

EX:

public class CustomControl 
{ 
    private Form1 _form; 

    public CustomControl(Form1 form) 
    { 
     _form = form; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _form.ABC = "HI"; 
    } 
} 
+0

簡単でありふれた。イベントは行く方法です。 –

+0

こんにちはタイラー。あなたのメソッドを使用すると、エラー "オブジェクトのインスタンスに設定されていないオブジェクト参照"が表示されます –

-1

私はあなたが使うべきだと思うことはだからあなたの場合にはそれがあるべき

this.ParentForm 

です:

public string ABC 
{ 
    set { this.ParentForm.listBox1.Items.Add (value); } 
} 
1

イベントを公開します( "ItemAdded" またはあなたのメインフォームが扱うことができる子フォームの中で)。 EventArgs派生オブジェクトを通じて、イベント購読者にデータを渡します。あなたのメインフォームは、2つのクラス間の緊密な結合なしで、UIを更新できます。 1つのクラスは別のクラスのUIレイアウトについて知ってはいけません。(この質問がうまくいけば誰もが示唆しているようなものです)

関連する問題