私はC#にかなり慣れていませんが、この時点まではすべてうまくいきました。
フォームとほとんどの作業を行うクラス (非静的およびプログラム部分) から始めます。フォーム 1 のクラスのオブジェクトをインスタンス化し、ログインします。
次に、次のフォーム form2 に切り替えます。実際、クラスはそれを行います。そこに次の行を含むメソッドがあります。
this.f2 = new Form2();
その後:
f2.Show();
f2 は Form2 型のクラス メンバーであり、この時点まではすべて正常に動作します。
この Form2 は、ネットワーク イベントを表示したい大きなテキスト ボックスだけで構成されています。イベント ハンドラーは問題なく動作しますが、フォームへの参照は機能していないようです。私が行った場合
f2.tetBox1.Text = "Some text";
テキスト ボックス内のテキストは変更されません。
ここで何が間違っていますか?
ここに私がやっていることのより詳細な説明があります:
Form1
myProg
のインスタンスである にログイン情報を渡しますMyClass
。ログインが成功した場合、Form1 は呼び出しますmyProg.makeForm();
MyClass のメソッドは次のようになります。
public void makeForm() {
this.f2 = new Form2();
f2.Show();
this.sendString("start f2");
}
これはMyClass.sendString()
次のとおりです。
private void sendString(string text) {
SystemSounds.Beep.Play();
this.f2.setTextBox(text);
}
setTextBox()
ご覧のとおり、これはofを呼び出しますForm2
- ここで提案されているように実装しました。奇妙なことに、ここまではすべてうまく機能しています。Form2 には、textBox1 に "start f2" が含まれていることが示されます - 期待どおりです。しかし、イベントが発生しても、textBox1 のテキストは変化しません。ビープ音が問題なく再生されるため、sendString() メソッドが問題なく呼び出されます。
私が観察したことの1つは、ビープラインが の呼び出しの後に配置されている this.f2.setTextBox(text);
場合、メソッドがイベントハンドラーから呼び出された場合に再生されません。
f2
、ところで、はの非公開メンバーですMyClass
:
private Form2 f2;