mdiタイプのプログラムでパブリックブールを子フォームからtrueに切り替えるにはどうすればよいでしょうか。
ログオンと呼ばれる子フォームがあります。すべてがチェックアウトされた場合、form1(メイン)フォームで「認証済み」ブール値をtrueに設定します。
物事を行うための適切で真のOOの方法は、親がアタッチできる子フォームのイベントを公開することです。子フォームにそのことについての仮定を持たせる場合、関心の分離に違反していますMdiParent
。
たとえば、あなたが説明することを行う非常に簡単な方法は、これをあなたの子供のフォームに持つことです:
public event EventHandler Authenticated;
親がそれを開いたとき...
YourForm newForm = new YourForm();
newForm.Authenticated += new EventHandler(newForm_Authenticated);
newForm.MdiParent = this;
// and so on
Authenticated
子フォームにブールプロパティを追加し、イベントの名前をに変更することで、もう少し洗練されたものにすることもできます(つまり、少し意味があります)AuthenticatedChanged
。次に、同じイベントハンドラーを使用してプロパティの値を調べ、ユーザーが認証されているかどうかを判断できます。
どちらのシナリオでも、親に更新させたい場合は、子フォームからイベントを発生させるだけです。
メインフォームを保持するグローバルにアクセス可能な変数を作成し、子内でその変数を使用してメインフォームのメソッドを呼び出すことができます。
または、子ウィンドウの適切なParentまたはOwnerプロパティをメインフォームの適切なタイプにキャストし、そこから作業することもできます。
「ログオン」フォームを使用していることに気付いたので、次のことを試すことができます。ユーザー名/パスワードのテストの成功に応じて、ログオンフォームのDialogResultプロパティを設定します。例としてusername/passを使用しています。ログオンフォームで次のようにします。
if(isMatch(username, password)){
this.DialogResult=DialogResult.OK;
this.Close();
}
else MessageBox.Show("Logon error - try again!");
// or anything else you would like to do in case of an error
そして、親フォームで:
LogonForm f = new LogonForm();
if(f.ShowDialog() == DialogResult.OK){
// continue
}
else {
// abort
}