-1

実はそれが私の最初のプロジェクトです。VB.Net2008をC#2010に変換したいのですが、説明のplsがほとんどありません。

Form2プロパティで設定します- IsMDIContainer = True。次に、以下のコードを開いてMdiChild、閉じるボタンをクリックしたときの問題は何ですか。また、を閉じていMDIParentます。しかし、私はmdichildだけを閉じる必要があります...そのために、次のコードを配置してVb.Net2008スタイルのように試しましたが、機能しMDIParent Form2ません。正しい方向...

private void toolStripButton1_Click(object sender, EventArgs e)
{
  Form3 NwMdiChild2 = new Form3;
  NwMdiChild2.MdiParent = this;
  NwMdiChild2.Dock = System.Windows.Forms.DockStyle.Fill;
  NwMdiChild2.Show();
}

private void Form2_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
  Form[] MdiChildForms = this.MdiChildren;
  int kkk1 = MdiChildForms.Length;
  int x = 0;
  for (x = 0; x <= MdiChildForms.Length - 1; x += 1) 
  {
    if (MdiChildForms[x].Name == "Form1")
    {
      kkk1 = kkk1 - 1;
    }
    MdiChildForms[x].Close();
  }
  if (kkk1 > 0) 
  {
  // For Not Closing
  e.Cancel = true;
  }
  else
  {
    // For Closing
    e.Cancel = false;
    Application.Exit();
  }
}

私にとって正しい方向性はありますか?

4

1 に答える 1

1

あなたが何を達成したいのかよく理解しているかどうかわかりません。親フォームを閉じるのではなく、[親フォームを閉じる]ボタンをクリックしたときに、すべての子のフォームを閉じますか?Form2はメインフォーム(親MDIコンテナ)、Form3はMDIの子ですよね?
次のコードを試して、それがあなたが求めているものであるかどうかを教えてください:

private void toolStripButton1_Click(object sender, EventArgs e)
{
    Form3 NwMdiChild2 = new Form3();    //don't forget ()
    NwMdiChild2.MdiParent = this;
    NwMdiChild2.Dock = System.Windows.Forms.DockStyle.Fill;
    NwMdiChild2.Show();
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    //if no MDI child - this is going to be skipped and norlmal Form2 close takes place
    if (this.MdiChildren.Length > 0)    //close childrens only when there are some
    {
        foreach (Form childForm in this.MdiChildren)
            childForm.Close();

        e.Cancel = true;  //cancel Form2 closing
    }
}
于 2011-05-05T09:40:39.310 に答える