ボタンをクリックすると、新しいフォーム (Form2 としましょう) を開きますが、その Form2 を複数回開きたくありません。そして、.ShowDialog() を使用したくありません。前のフォームに移動できないためです。どうやってやるの ?
6 に答える
4
Application.OpenFormsプロパティを使用して、フォームが既に開いているかどうかを確認できます。
if (!Application.OpenForms.OfType<Form2>().Any())
{
Form2 form2 = new Form2();
form2.Show();
}
于 2013-03-19T14:52:58.123 に答える
2
新しいフォームを作成する代わりに、既存のフォームを表示できます。
Form2 _form2 = null;
void Button1_Click(object sender, EventArgs e)
{
if (_form2 == null)
{
_form2 = new Form2();
_form2.Closed += Form2_Closed;
}
_form2.Show();
_form2.BringToFront();
}
private void Form2_Closed(object sender, System.EventArgs e)
{
_form2 = null;
}
于 2013-03-19T14:56:43.500 に答える
0
Form2 f;
bool isOpen = false;
private void button1_Click(object sender, EventArgs e)
{
if (f == null)
{
f = new Form2(); ;
f.FormClosed += new FormClosedEventHandler(f_FormClosed);
}
if (!isOpen)
{
isOpen = true;
f.Show();
}
}
void f_FormClosed(object sender, FormClosedEventArgs e)
{
isOpen = false;
}
これを試すか、Application.OpenFormsを使用して、どれが開いたかを確認してください
于 2013-03-19T14:57:58.377 に答える
0
メソッドを発行するShow
と、フォームが表示され、ユーザーがフォームに戻ることができますがOnClosing
、フォームのイベントをオーバーライドすることもできます。
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
}
これにより、ユーザーは文字通りフォームを閉じることができなくなります。最後に、必要に応じてHide
、ユーザーがフォームを閉じたときにフォームを閉じることができます。
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
this.Hide();
}
次に、ボタンがクリックされたときに再表示できるように、最初のフォームでそのインスタンスを保持する必要があります。したがって、最初のフォームでは、次のようなクラス フィールドを使用できます。
private Form2 _form2 = new Form2();
ボタンをクリックすると、次のようになります。
_form2.Show();
実際にはフォームを閉じることができないため、これは常に機能します。
于 2013-03-19T14:53:55.990 に答える
0
次のようなものを試すことができます
bool windowIsNotOpen;
Mutex mutext = new Mutex(true, "Form2", out windowIsNotOpen);
if (!windowIsNotOpen)
{
// Form2 is already open
return;
}
于 2013-03-19T14:55:19.590 に答える
0
開いているかどうかを示す静的プロパティを実行できます。フォームを開くときに設定し、フォームを閉じるときにオフにします。
class Form2 {
public static bool IsOpen { get;set; }
public Form2() {
Load += (sender, e) => { Form2.IsOpen = true; };
Closed += (sender, e) => { Form2.IsOpen = false; };
}
}
開くときはいつでも、最初にフラグを確認してください。
于 2013-03-19T14:57:13.293 に答える