2009-06-30 22 views
0

mdiタイプのプログラムの子フォームからパブリックブールを真に切り替えるにはどうすればよいですか?親フォームの変数をmdiの子フォームから設定する

私はあなたがメインフォームを保持しているグローバルにアクセス変数を作ることができ、すべてがチェックアウトした場合、私はをForm1にtrueに「認証済み」ブール値を設定することをログオン(メイン)フォーム

答えて

3

実際に行うことは、親が付けることができる子フォームにイベントを公開することです。子フォームがそのMdiParentを前提にしている場合、あなたは懸念の分離に違反しています。例えば

、あなたの子フォームでこれを持っているだろう記述する何をして、非常に簡単な方法:

public event EventHandler Authenticated; 

ザ・親がそれを開く...

YourForm newForm = new YourForm(); 

newForm.Authenticated += new EventHandler(newForm_Authenticated); 

newForm.MdiParent = this; 

// and so on 

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

どちらのシナリオでも、親を更新する場合は、イベントを子フォームから呼び出すだけです。

+0

完璧な答え、あなたは私にそれを打つ。 –

+0

これはまさに私が望むものだと思っていますが、私は少し不明です - コードの3行目(私の場合はログオン)にnewform_authenticatiedと言ってエラーが出ます。現在のコンテキストに存在しません - これは、テキストボックスやコスチュームusercontrol私はちょうどdesgineビューでクリックして、それを行うだろうが、フォームが親のフォームで存在しないために何をすべきか理解するだろう私は衣装のイベントを作る方法がわからないより多くのことを説明してください(そしてもう一度ありがとう) – Crash893

+1

クラッシュ、その行は単なる例でした。通常、+ =と入力してTabキーを押すだけで、Visual Studioは新しいイベントハンドラを自動的にペイントします。 newForm_Authenticatedは、作成するメソッドの名前です。 –

0

と呼ばれる子フォームを持っています子の中でその変数を使用して、メインフォームのメソッドを呼び出します。

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

+0

イムわからないメインフォームを保持することにより、ログオンフォームで のような何かをしますか? – Crash893

0

"ログオン"フォームを使用していることに気がついたので、次のように試してみてください。ログオンフォームのDialogResultプロパティをユーザー名/パスワードテストの成功に従って設定します。私はユーザー名/パスを例として使用しています。親フォーム上の

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 
} 
関連する問題