2017-07-31 30 views
1

プログラムで追加されたTextBoxを使用して、design.csであらかじめ作成されたTextBoxコントロールを使用しています。まず、このTextBoxはユーザーによって埋められ、ボタンonClickメソッドでは、コンテンツはonClickメソッドから呼び出された別のクラスファイルのメソッド内で処理されます。その後、TextBoxにあるものをすべて削除して、初期状態のように空にしたいが、それはうまく動作しない。プログラムで追加されたコントロール(C#)にアクセスできません

/*MainForm.cs*/ 
private TextBox tb; 
private SubForm sf = new SubForm(); 
private void initTextBox(){ 
    tb = new TextBox(); 
    preExistingPanel.Controls.Add(tb); //attach the textbox onto a panel 
} 

private void MainForm_Load(object sender, EventArgs e){ 
    initTextBox(); 
} 

private void button_Click(object sender, EventArgs e){ 
    string tbContent = tb.Text; 
    sf.processData(tbContent); 
} 

public void EmptyTextBox(){ 
    tb.Text = "";  //This does not work, and nothing happens 
} 


/*SubForm.cs*/ 
public void processData(string tbContent){ 
    /*Do something with tbContent*/ 
    ... 
    ... 
    /*Here, I want to empty the textBox*/ 
    MainForm mf = new MainForm(); 
    mf.EmptyTextBox(); 
} 

誰かがこのコードで間違っているものを見つける私を助けてくださいことはできますか?私はそれが知っている

EmptyTextBox() 

メソッドが呼び出されますが、何も起こりません。

+0

preExistingPanel、メインフォームとの関係はどのようなもので、サブフォーム?この情報がなければ、誰もあなたを助けることができるとは確信していません – wnvko

答えて

2

processDataメソッドでは、MainFormの新しいインスタンスを作成しています。あなたがプログラムで作成したTextBoxを持っていない(表示されていない/ロードされていない - これはあなたのメインフォームにアクセスする正しい方法ではありません)。あなたは(も、あなたのnew MainForm行を削除します)あなたのサブフォームのコンストラクタにあなたのMainFormの参照を渡すことができEmptyTextBox().

を呼び出すときですから、とNullReferenceExceptionを取得します:

MainForm mf; 
public SubForm (MainForm main) 
{ 
    mf = main; 
} 
+0

それは完璧な感覚です、ありがとう!しかし、どうすればこの問題を解決できますか?私は、StackOverFlowExceptionを引き起こすコンストラクタとして互いのクラスにお互いの新しいインスタンスを作成することを知っている。 – JessicaD

+0

毎回新しいものを作成しないでください。参照を渡します。編集を参照してください。その他の参考資料:https://stackoverflow.com/a/26862346/2957232 –

+0

ありがとうございました!私はそれが働くようになった! – JessicaD

関連する問題