3

私はc#を使用してwinformsアプリケーションに取り組んでいます。左側にメニューがあるMDIコンテナがあり、ボタンを押すと適切なフォームが表示されます。たとえば、Form1を開くボタンを3回クリックすると、フォームの6つのインスタンスが開きます。したがって、他のForm1インスタンスを破棄するメソッドを作成する必要があると思いました。次の方法では、MDIの子をループしていますが、新しいインスタンスを除く他のすべてのインスタンスを閉じる方法について助けが必要です。

  public void DisposeAllButThis(Form form)
    {
        foreach (Form frm in this.MdiChildren)
        {
            if (frm == form)
            {
                frm.Dispose();
                return;
            }
        }
    }
4

6 に答える 6

9

フォームも同じタイプであるかどうかを確認する必要があります。

public void DisposeAllButThis(Form form)
{
    foreach (Form frm in this.MdiChildren)
    {
        if (frm.GetType() == form.GetType() 
            && frm != form)
        {
            frm.Dispose();
            frm.Close();
        }
    }
}

Close and Disposeの詳細については、C#Form.CloseとForm.Disposeを参照してください。

于 2012-07-03T10:22:17.240 に答える
2
public void DisposeAllButThis(Form form)
{
    foreach (Form frm in this.MdiChildren)
    {
        if (frm != form)
        {
            frm.Dispose();   
            frm.Close();          
        }
    }
    return;
}
于 2012-07-03T10:43:28.570 に答える
1
foreach (Form frm in this.MdiChildren)
{
   if (frm != form)
   {
      frm.Dispose();
      return;
   }
} 
于 2012-07-03T10:20:04.240 に答える
0

この機能によってあなたは別のクラスからそれを呼び出すことができます:そしてこれに注意してください:frm.GetType() != Parent.GetType()

public void DisposeAllButThis(Form parentForm)
    {
        foreach (Form frm in Parent.MdiChildren)
        {
            if (frm.GetType() != Parent.GetType()
                && frm != Parent)
            {
                frm.Close();
            }
        }
    }
于 2013-08-21T19:31:16.730 に答える
0
private void closallforms()
        {
            foreach (Form frm in this.MdiChildren)
            {
                if (frm != Parent)
                {
                    frm.Close();
                }
            }
        }
于 2016-02-11T15:22:30.370 に答える
0

別の子フォームから呼び出す場合は、次を使用できます。 this.DisposeAllButThis(this.FindForm());

次の方法を使用します。

private void DisposeAllButThis(Form form)
{
    foreach (Form frm in ParentForm.MdiChildren)
    {
       if (frm != form)
       {
          frm.Dispose();
          frm.Close();
       }
    }
 }
于 2019-06-19T16:40:53.970 に答える