0

mdiタイプのプログラムでパブリックブールを子フォームからtrueに切り替えるにはどうすればよいでしょうか。

ログオンと呼ばれる子フォームがあります。すべてがチェックアウトされた場合、form1(メイン)フォームで「認証済み」ブール値をtrueに設定します。

4

3 に答える 3

3

物事を行うための適切で真のOOの方法は、親がアタッチできる子フォームのイベントを公開することです。子フォームにそのことについての仮定を持たせる場合、関心の分離に違反していますMdiParent

たとえば、あなたが説明することを行う非常に簡単な方法は、これをあなたの子供のフォームに持つことです:

public event EventHandler Authenticated;

親がそれを開いたとき...

YourForm newForm = new YourForm();

newForm.Authenticated += new EventHandler(newForm_Authenticated);

newForm.MdiParent = this;

// and so on 

Authenticated子フォームにブールプロパティを追加し、イベントの名前をに変更することで、もう少し洗練されたものにすることもできます(つまり、少し意味があります)AuthenticatedChanged。次に、同じイベントハンドラーを使用してプロパティの値を調べ、ユーザーが認証されているかどうかを判断できます。

どちらのシナリオでも、親に更新させたい場合は、子フォームからイベントを発生させるだけです。

于 2009-06-30T17:07:17.037 に答える
0

メインフォームを保持するグローバルにアクセス可能な変数を作成し、子内でその変数を使用してメインフォームのメソッドを呼び出すことができます。

または、子ウィンドウの適切なParentまたはOwnerプロパティをメインフォームの適切なタイプにキャストし、そこから作業することもできます。

于 2009-06-30T17:03:49.863 に答える
0

「ログオン」フォームを使用していることに気付いたので、次のことを試すことができます。ユーザー名/パスワードのテストの成功に応じて、ログオンフォームの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
}
于 2009-07-02T06:13:52.270 に答える