【问题标题】:Access MDI child control from MDI parent control从 MDI 父控件访问 MDI 子控件
【发布时间】:2013-02-24 06:43:31
【问题描述】:

我有一个MDIParent 表单,MDIChild 表单和名为form1form1 的普通表单是从 MDIChild 继承的,并且表单一有一个名为 textBox1 的文本框,在父表单中我有两个按钮新建和保存,当我点击 New child form 应该加载并且当我点击 save 时应该弹出一个带有 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 函数中,我调用了名为 getdata() 的 form1 函数

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

【问题讨论】:

  • 我真的必须指出,你的选角完全没有必要。 object form 应该是 Form form
  • 谢谢你,Simon Whitehead 但我的问题还没有解决,请谁能帮帮我

标签: c# winforms textbox


【解决方案1】:
 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());
            }
        }
    }

【讨论】:

  • 兄弟,我的 form1 中有一个文本框,我在设计时添加它,现在这段代码在运行时创建新文本框,使用这些文本框有些混乱,我想得到我的设计时间文本框值
  • 在form1 中GetMessage() 的实现就在你手边,如果你有设计时文本框的参考,那么你可以根据参考改变GetMessage() 的实现。如果遇到困难发送完整的代码,我会尽力帮助你
  • 朋友我是这个论坛的新手,我不知道如何发送代码给你,请告诉我?
猜你喜欢
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多