-3

現在、2つのフォームがあります。Form1いくつかのタブコントロールがあります。からタブを閉じたいのですがForm2。Form1はMDIフォームです。Form2は子フォームです。Form2はForm1のタブページにあります。Form2に閉じるボタンを入れてForm1のタブページを閉じたいだけです。

Form2:

private void btnClose_Click(object sender, EventArgs e)
{
    Form1 frm = new Form1();
    frm.tabControl1.TabPages.Remove(frm.tabPage1); 
}

このコードはエラーを出しませんが、vs2010では機能しません。また、、で試してみましRemoveAtRemoveByKey。結果は同じです。

注:Form1からForm2にプログラムでボタンを追加することで問題を解決しました。

Form1;

Button btn = new Button();
btn.Text = "X";
btn.Width = 23;
btn.Height = 23;
btn.FlatStyle = FlatStyle.Flat;
btn.Location = new Point(2, 3);
Form2 frm = new Form2();
frm.Controls.Add(btn);
4

1 に答える 1

0
public class Form1 : Form
{
    //Delegate stuff for performing on UI thread.
    private delegate void TabPageDelegate(TabPage tab);
    private void RemoveTabOnUi(TabPage tab)
    {
        tabControl1.TabPages.RemoveAt(tab);
    }
    //internal method that will be accessible to other members of this namespace.
    internal void RemoveTab(TabPage tab)
    {
        //Do this action on UI delegate.
        this.Invoke(new TabPageDelegate(RemoveTabOnUi), tab);
    }

    //... Form1 Stuff
}
public class Form2 : Form
{
    public Form2()
    {
       //Add event to the closing event handler
       this.Closing += OnClosing;
    }
    private void OnClosing(object sender, EventArgs e)
    {
       //Check to make sure that MdiParent and Parent are correct
       if(null != this.MdiParent && this.MdiParent is Form1 && 
              null != this.Parent && this.Parent is TabPage)
       {
           //Calls the Form1().RemoveTab() internal method 
           ((Form1)this.MdiParent).RemoveTab((TabPage)this.Parent);
       }
    }

    //... Form2 Stuff
}
于 2013-02-26T22:44:25.183 に答える