ウィンドウ「子1」があり、「親」から開きます。メニューをクリックして「Child 1」を開くと、メニューを数回クリックすると、複数のウィンドウを開くことができます。ウィンドウ「Child 1」が開くかどうかを確認する方法は、それを表示するだけです。
ウィンドウを開くために使用するコード:
var ticketTypesForm = new fTicketTypes();
ticketTypesForm.Show();
を呼び出すApplication.OpenForms
と、開いているすべてのフォームのコレクションが得られます。開いている各フォームをナビゲートして、子フォーム 1 が既に作成されているかどうかを確認できます。それが単に.Focus()
メソッドを呼び出して前面に表示するだけの場合。まだ作成されていない場合は、通常どおりフォームを作成します。
新しいフォームを再度表示する前に、既に開いているか、使用していないかを確認してください。
Application.OpenForms.OfType<YOUR_FORM_TYPE>().Any())
開いている場合はコマンドを無視しますが、再度開いていない場合は、次のことができます。
ticketTypesForm myTicketTypesForm;
private void OpenDialog(object sender, EventArgs e)
{
if (!Application.OpenForms.OfType<ticketTypesForm>().Any())
{
if (myTicketTypesForm == null)
myTicketTypesForm = new ticketTypesForm();
myTicketTypesForm.Show();
}
else
{
myTicketTypesForm.Focus();
}
}
毎回作成する代わりに、クラスからの参照を保持してください。
var を使用しないでください。代わりにこれを行うことができます
fTicketTypes ticketTypeForm;
//Some code goes here.
if(ticketTypeForm == null)
ticketTypeForm = new fTicketTypes();
ticketTypeForm.Show();
アプリがモーダル モードで子ウィンドウを使用しても問題ない場合 (親ウィンドウとのユーザー操作は必要ありません)、子ウィンドウをモーダルとして使用します。ウィンドウは常に上にあります。
var ticketTypesForm = 新しい fTicketTypes(); ticketTypesForm.ShowDialog(これ);
また、ユーザーがウィンドウを閉じたときに、アプリはメソッド Hide() によって子ウィンドウを閉じることができます。したがって、ダイアログが破棄されることはありません。ただし、この場合、 ticketTypesForm の同じインスタンスを使用する必要があります (ウィンドウが開かれるたびに新しいインスタンスを作成するのではありません)。
アプリの初期化または最初の表示
var ticketTypesForm = new fTicketTypes();
見せる
ticketTypesForm.Show(this);
近い
ticketTypesForm.Hide();