ここに、Form1とForm2の2つのWinFormがあるとします。そして、Form1を非表示にしました。Form1オブジェクトがまだ実行されているかどうかを検出するために、Form2でコードをどのように記述できるのでしょうか。
使用しようとしましForm1.ActiveForm
たが、NULL値が表示されるようです。より良いアイデアはありますか?ありがとう。
私の方法を使用して、アクティブなフォームを取得できます。
public static Form IsFormAlreadyOpen(Type FormType)
{
foreach (Form OpenForm in Application.OpenForms)
{
if (OpenForm.GetType() == FormType)
return OpenForm;
}
return null;
}
Form1 に静的インスタンスとしてアクセスしようとしているように見えます。この方法で Form1 を作成しない限り、アクセスできず、関数から NULL 値を取得している可能性があります。Form2 から Form1 を参照する場合は、参照を渡す必要があります。
フォーム1:
public class Form1
{
public Form1()
{
}
}
フォーム2:
public class Form2
{
private Form1 _frm1;
public Form2(Form1 frm1)
{
_frm1 = frm1;
}
}
Form2 のインスタンスを作成するときに、次のように宣言します...
Form2 frm2 = new Form2(frm1);
ここで、frm1 は Form1 のインスタンスです。
Form2 から Form1 を参照する必要があるときはいつでも、_frm1 を介して参照できます。
「is still in memory」を実行することを意味する場合は、次のことができます
フォームへの参照をテストするだけです。if(form1 != null)
その後、非表示になっていることをテストできます。if(form1.Visible)
おそらく最小化されます:if(form1.WindowState != FormWindowState.Minimized)
フォームが閉じられている (したがって破棄されている) かどうかを確認したい場合は、そのフォームからメソッドを呼び出して、ObjectDisposedException
.
try
{
Form1.SomeMethod();
}
catch (ObjectDisposedException ex)
{
// Form has been closed
}
フォームが閉じられておらず、表示されているかどうかを確認したい場合は、「Visible」プロパティを使用できます
private Form GetForm()
{
Form mdiParent = this.MdiParent;
Form1 objForm
foreach (Form frm in mdiParent.MdiChildren)
{
objForm = frm as Form1;
if (objForm != null)
{
objForm.Activate();
return objForm;
}
}
return null;
}