0

私は現在、c#でスタンドアロンアプリケーションを開発しています。また、c#は初めてなので、そのすべての機能を知りません。

私のアプリケーションでは、MDIContainerプロパティがtrueであるメインフォームが1つあります。そのメインフォームで、さまざまな子フォームを開くことができる1つのメニューを作成しました。

問題は、インスタンスを作成してクリックイベントで表示したときに、ユーザーがメニュー項目をクリックするとフォームが開いていることです。ただし、1つの子フォームがすでに開いていて、ユーザーが別のフォームをクリックした場合は、それも開いています。

その場合、前の子フォームを自動的に閉じたいと思います。

以下はサンプルコードです。

public void menu1_click(sender,e)
{
  Dim objForm1 As New Form1()
  objForm1.ShowDialog()
}

およびsecode形式の場合、

public void menu2_click(sender,e)
{
Dim objForm2 As New Form2()
objForm2.ShowDialog()
}

したがって、ここでは両方のフォームを一度に開くことができますが、新しいフォームが開いた場合は前のフォームを閉じたいと思います。一度に1つのフォーム。

構文と句読点の間違いは単なるサンプルとして無視してください。それを行うための最良の方法を教えてください!!!!

4

6 に答える 6

3

MDIフォームに次の関数を作成します。

public void OpenForm(Form toOpen)
{
    foreach (Form child in MdiChildren)
        child.Close();

    toOpen.MdiParent = this;
    toOpen.Show();
}

次のように、メニュー項目のイベントハンドラーで呼び出します。OpenForm(new Form1())

于 2012-07-27T07:57:53.043 に答える
1

クリックイベントでウィンドウを宣言する代わりに、ウィンドウをグローバルにします。次に、フォームのVisibleプロパティを確認します。他のフォームに当てはまる場合は、開こうとしているフォームでClose()メソッドを使用できます。

于 2012-07-27T07:46:18.110 に答える
1

他のすべてのフォームを閉じるには、次のように1つのクラスと静的メソッドを作成する必要があります。

class Helper
{

    public static void HideAllForms()
    {
        Assembly currentAssembly = Assembly.GetExecutingAssembly();
        int count = Application.OpenForms.Count;
        for (int i = 0; i < count; i++)
        {
            Form f = Application.OpenForms[i];
            if (f.GetType().Assembly == currentAssembly && f.Name != "frmMDI") //Here 'frmMDI' is the name of mdiform.
            {
                f.Close();
            }
        }
    }
}

次に、関数でこのメソッドを呼び出します

  public void menu2_click(sender,e)
  {
    Helper.HideAllForms();
    Form2 objForm2 =New Form2();
    objForm2.Show();
  }

これは私にとっては問題なく機能します。これがあなたにとっても機能することを願っています。

于 2012-07-27T08:06:56.670 に答える
0

そのフォームを開くには、次のようにコードを記述する必要があります。

最初のフォームを開くには、MDIフォームのクリックイベントにコードを記述します。

Dim iobjForm1 As New Form1()
iobjForm1.ShowDialog()

およびsecode形式の場合、

Dim iobjForm2 As New Form2()
iobjForm2.ShowDialog()

一度に2つのフォームが開きます。

これがお役に立てば幸いです。

于 2012-07-27T07:28:53.947 に答える
0

最初のフォームをモーダルとして表示します。モーダルフォームでは、閉じるまで新しいフォームを開くことはできません。

于 2012-07-27T07:45:56.373 に答える
0

一度に1つの子フォームのみを存在させたい場合は、MDIフォームよりも適した他のメカニズムがある可能性があります。

たとえば、子フォームを使用する代わりに、ユーザーコントロールを作成できます。メインフォームの固定された場所(たとえば、パネルの内側、配置用)に1つのユーザーコントロールを表示してから、別のユーザーコントロールと交換します。これは、新しい子ウィンドウを開いて古いウィンドウを閉じる代わりです。

于 2012-07-27T08:25:04.730 に答える