Visual Studio 2013、Visual C#、Windowsフォームアプリケーション。Windows Formの所有者を参照するにはどうすればよいですか?
私は2つのフォームクラスに興味があります。 GameForm.csの後とGameForm.cs。
最初のポップアップは、ユーザーが2番目のポップアップボタンをクリックした場合のみ表示されます。
AfterTheGameForm afterTheGameForm = new AfterTheGameForm();
afterTheGameForm.Show(this);
したがって、TheGameFormがAfterTheGameFormの所有者であることは明らかです。ここに私の問題があります... AfterTheGameFormクラスで私は所有者クラスを参照して、その特定のメソッドを使用したいと考えています。私は所有者がタイプTheGameFormであることを確実に知っていると私はキャストしようとしています:
TheGameForm gForm = (TheGameForm)this.Owner;
if(gForm!=null){
MessageBox.Show(theGameForm.CheckedRadioButton);
}
else
{
MessageBox.Show("theGameForm==null");
}
私もこのキャストを試してみました:
TheGameForm gForm = this.Owner as TheGameForm;
gFormオブジェクトがnullであります!これはどのように可能ですか?
いいえ[mcve]がなければ、コード内の問題を診断することは不可能です。つまり、あなたが投稿した少しのコードから、あなたの 'AfterTheGameForm'は' TheGameForm'に非常に強く結びついている、つまりタイプを認識していて、クラスの特定のメンバーに直接アクセスしていることは明らかです。より良いデザインでは、イベントやその他の抽象化を使用して、フォームを実際には互いに結びつけることなく相互作用させることができます。言い換えると、AfterTheGameFormは、ここで正しいことが設定されるための 'Owner'プロパティを設定する必要はありません。 –
ええ、あなたは正しいです。私は良いコードを設計する方法を知らない、それは私の問題です! :)私はその解決策を所有者と見つけ、それを使用しようとしました。 – Skemelio
それを見つける別の方法は、 'TheGameForm gForm = Application.OpenForms.OfType().FirstOrDefault();' –
Slai