3

私はこれらのフォームを持っています:

MainScreen- MDIコンテナ
DataBaseOutput-
NewAnime-

DataBaseOutputには、それぞれ異なるテーブルのデータグリッドを保持するタブコントロールがあります。アクセスデータベースを使用しています。

これらのタブには、「新規」、「編集」、「削除」などの関数が呼び出されるメニューストリップがあります。ここで、最初のタブのメニューストリップを表示して[新規]をクリックすると、MDIコンテナ内の[NewAnime]フォームを開きます。しかし、これは私が計画したようには機能していません。最初は、子フォーム(DataBaseOutput)から呼び出してみました。その結果、子ではなく新しいフォームが開かれました。私がそれを子供にしたとき、それは現れませんでした。

それから私はたくさんのことを試してみますが、それでも私はそれを理解していません。

これは、フォームを呼び出すための現在のコードです。メインフォームのメソッドを使用してフォームを呼び出します。

private void NewAnime_Click(object sender, EventArgs e)
{
    MainScreen main = new MainScreen();
    main.mShowForm(2);

    this.Close();
}

メインフォームのメソッド:

// Forms for MDI Parent
DataBaseOutput OutputForm = new DataBaseOutput();
NewAnime AddAnime = new NewAnime();

// How i made them childs (this is at the InitializeComponent(); part)
OutputForm.MdiParent = this;
AddAnime.MdiParent = this;

public void mShowForm(int formnumber)
{
    switch (formnumber)
    {
        case 1: OutputForm.Show(); break;
        case 2: AddAnime.Show(); break;
    }
}

誰かが私が間違っていることの手がかりを持っていて、おそらくより良い考えを持っていますか?これは少し手間がかかるかもしれませんが、私が言ったように、MDIフォームを使用するのは初めてであり、それを機能させようとしています。

4

1 に答える 1

1

を に設定しMainFormましたMDIContainerか? これを行うには、そのIsMdiContainerプロパティを true に設定します。Fileまた、Window最上位のメニュー項目とメニュー項目Newがあることも確認してくださいClose。(チュートリアルはこれを示唆していますがWindow、少なくともメニュー項目が必要であることはわかっています)。

詳細なガイダンスについては、このチュートリアルをご覧ください: MDI 子フォームの作成 (MSDN)

編集:もっと詳しく見ると、MainForm の新しいインスタンスを作成し、フォームを既存の MainForm に表示するのではなく、そのインスタンスの子として表示しようとしているようです。この時点で既に MainForm のインスタンスが開いていると思いますか? また、OutputForm フォームと AddAnime フォームが MainForm の子であると仮定すると、既存のインスタンスのメソッドを次のように呼び出すことができます。

private void NewAnime_Click(object sender, EventArgs e)
{
    this.ParentForm.mShowForm(2);
    this.Close();
}

ただし、理想的には、MainForm がリッスンする DataBaseOutput にイベントを設定し、イベントが発生したときに新しいフォームを表示する必要があります。詳細については、こちらを参照してください(子フォームではなくユーザー コントロールについて説明していますが、原則は同じです) :

ユーザー コントロールから親フォーム関数を呼び出す

于 2011-03-29T10:58:57.720 に答える