私のプログラムには、 と の 2 つのフォームがformLogin
ありformStudent
ます。はformLogin
、 という外部クラスを介してサーバーに接続されていますConnection
。に接続を渡し、 をformStudent
表示してformStudent
を非表示にしようとしていformLogin
ます。このConnection
クラスにはフォーム用の 2 つのコンストラクターがあるため、どこにでもフォームの新しいインスタンスを作成せず、フォームを継承します。
クラスから呼び出そうとしたメソッドConnection
で、コメントに示されているエラーが表示されます。
public void SuccessfulLogin()
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => SuccessfulLogin()));
/*
**Invoke or BeginInvoke cannot be called on a control until the window
handler has been created**
*/
}
else
{
formStudent.connection = formLogin.newConnection;
formLogin.Hide();
formStudent.Show();
}
}
ステートメントを追加if
してハンドルが作成されているかどうかを確認しようとしましif (IsHandleCreated)
たが、ブレーク ポイントを使用すると、メソッド内のコードがまったく実行されていないように見えます。formLogin
また、変更なしで、クラスとクラスの両方にこのメソッドを配置しようとしましたConnection
。
アップデート:
私を正しい方向に向けてくれたKing Kingに感謝します。コードを次のように変更しました。
this.CreateHandle();
this.Invoke(new MethodInvoker(SuccessfulLogin));
そしてsucessfulLogin
これへの方法:
public void SuccessfulLogin()
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => SuccessfulLogin()));
}
else
{
formStudent = new frmStudent();
formStudent.connection = formLogin.newConnection;
formLogin.Hide();
formStudent.Show();
}
}