0

Mdi親フォームでは、メニュー項目を使用して子フォームを呼び出しています。子フォームでメニュー項目をロードする子フォームを閉じると無効にする必要があります再び有効になります..、FormClosingイベントハンドラーを試してみます答えが得られます..、

  private void btnMn1_Click(object sender, EventArgs e)
    {
        Forms.Cnblfrm cnbfrm = new Cnsmblfrm();
        cnsmbfrm.MdiParent = this;
        cnsmbfrm.Text = btnMn1.Text;
        cnsmbfrm.Show();
        this.btnMn1.Enabled = false;
        cnbfrm.FormClosed += new FormClosedEventHandler(cnsmbfrm_FormClosed);
    }

    void cnbfrm_FormClosed(object sender, FormClosedEventArgs e)
    {
        btnMn1.Enabled = true;
        //throw new NotImplementedException();
    }

上記のコードを使用することで答えが得られますが、20を超えるChildFormがあります。この方法を使用することにより、私のコーディングは増加しています....、これの代わりに任意の方法があります....、

4

1 に答える 1

3

私があなたを正しく理解しているなら:あなたはすべてのボタンが特定のフォームを開く20のボタンを持っていますよね?

その場合は、各ボタンのタグプロパティを開くフォームに設定できます。次に、すべてのボタンを繰り返し処理して、クリックイベントを設定する必要があります。すべてのボタンには同じクリックイベントがあります。(それをbtn_clickと呼びましょう)

btn_clickのコードは次のようになります。

private void btn_click(object sender, EventArgs e)
{
   Button button = sender as Button;
   if(button == null)
      return;
   Form form = button.Tag as Form;
   if(form == null)
      return;
   form.MdiParent = this;
   form.Text = button.Text;
   form.Show();
   button.Enabled = false;
   form.Tag = button;
   form.FormClosed += FormClosed;
}

private void FormClosed(object sender, FormClosedEventArgs e)
{
   Form form = sender as Form;
   if(form == null)
      return;
   Button button = form.Tag as Button;
   if(button == null)
      return;
   button.Enabled = true;
}
于 2013-03-25T12:16:34.107 に答える