0

と呼ばれるMDIParentフォーム、MDIChildフォーム、および通常のフォームがありform1form1MDIChild から継承されます。フォーム 1 には textBox1 というテキスト ボックスがあり、親フォームには [新規] と [保存] の 2 つのボタンがあります。メッセージ ボックスは値を含むポップアップである必要があります。問題は、メッセージ ボックスがテキスト値textbox1.textなしでポップアップすることです。textbox1

次のコードを使用して、親フォーム内に子フォームをロードします。

public partial class MDIParent1 : Form
{
    MdiClient mdi = null;
    string fname;

    public MDIParent1()
    {
        InitializeComponent();
        foreach (Control c in this.Controls)
        {
            if (c is MdiClient)
            {
                mdi = (MdiClient)c;
                break;
            }
        }
    }
}

そして、次のコードを使用してロードフォーム関数を呼び出すために使用します[新しいボタンをクリック]

private void ShowNewForm(object sender, EventArgs e)
{
    load_form(new Form1());
}

ロードフォーム機能は

private void load_form(object form)
{
    foreach (Form f in mdi.MdiChildren)
    {
        f.Close();

    }
    if (form == null)
        return;
    ((Form)form).MdiParent = this;
    ((Form)form).Show();
    ((Form)form).AutoScroll = true;
    fname = ((Form)form).Name;
}

私のフォームがロードされています..保存ボタンonClick関数で、呼び出されたform1関数を呼び出しますgetdata()

public void getdata()
{
    messageBox.show(textBox1.text);
}
4

1 に答える 1

2
 public partial class MDIChild : Form
    {
        public virtual string GetMessage()
        {
            return this.Name;
        }    
    }

    public class Form2 : MDIChild
    {
        TextBox textBox1 = new TextBox();

        public override string  GetMessage()
        {
            return textBox1.Text;
        }
    }


    public partial class MDIParent1 : Form
    {
        private MdiClient mdi = null;
        private string fname;
        private MDIChild currentActiveChild;

        public MDIParent1()
        {
            base.InitializeComponent();
            foreach (Control c in this.Controls)
            {
                if (c is MdiClient)
                {
                    mdi = (MdiClient) c;
                    break;
                }
            }
        }

        private void ShowNewForm(object sender, EventArgs e)
        {
            currentActiveChild = new Form2();
            load_form(currentActiveChild);
        }

        public void getdata()
        {
            if (currentActiveChild != null)
            {
                MessageBox.Show(currentActiveChild.GetMessage());
            }
        }
    }
于 2013-02-24T07:55:01.957 に答える