1

ボタンをクリックすると、新しいフォーム (Form2 としましょう) を開きますが、その Form2 を複数回開きたくありません。そして、.ShowDialog() を使用したくありません。前のフォームに移動できないためです。どうやってやるの ?

4

6 に答える 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 に答える