从mdi parent

时间:2018-01-10 07:47:23

标签: c# winforms devexpress parent-child

用作MDI父表单的主表单,它有DevExpress.XtraBars.Bar,它包含一个DevExpress.XtraBars.BarSubItem作为菜单。当我单击菜单项时,子窗体将安装此主窗体,显示一个打开的文件对话框,从XML文件中选择一个XML文件和数据填充文本框控件。子窗体中的这些文本框控件位于组控件框中。

我尝试了太多这样的试验:

private void bbiHakimIsListesiBilgileri_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
    if (ActiveMdiChild != null && ActiveMdiChild.Name == "_child_form")
    {
        var h = Control; // I don't know how I access GroupBox Control where located from child form.
        GetXMLDatas(h);
    }
    else
    {
        var frm = new _child_form { MdiParent = this, Dock = DockStyle.Fill };
        frm.Show();

        var h = Control; // I don't know how I access GroupBox Control where located from child form.
        GetXMLDatas(h);
    }
}

以下是GetXMLDatas方法:

private void GetXMLDatas(Control k)
{
    ofd.Title = @"Select an XML file.";
    ofd.Filter = @"(*.xml)|*.xml|All files(*.*)|*.*";
    ofd.FilterIndex = 1;
    ofd.InitialDirectory = Tools.documents;
    ofd.Multiselect = false;
    ofd.ShowDialog();
    if (string.IsNullOrEmpty(ofd.FileName)) return;
    var data = XElement.Load(ofd.FileName).Descendants("field");
    foreach (var f in Fields(k))
    {
        var value = data.FirstOrDefault(v => v.Attribute("key")?.Value == f.Name);
        if (value != null) f.Text = value.Attribute("value")?.Value;
    }
}

我不知道如何从主窗体中的子窗体访问GroupBox Control。

编辑 - 1:因此,我想从mdi父表单上的代码中找到mdi子表单上的groupbox控件。我有3个mdi子表单,两个子表单有一个groupbox。我想达到这些。因为如果我设法达到这两个,我想,我可以达到这些groupbox

编辑 - 2:GuidoG回答后,我尝试了这些:

MDI子表单名称为FormMDIChild_1。我将此代码添加到FormMDIChild_1文本中:

public GroupBox GetGroupBox()
{
    return groupBox1;
}

稍后,我将此代码添加到名为main form的mdi父窗体:

        if (ActiveMdiChild is FormMDIChild_1)
        {
            GroupBox myGroupBox = (FormMDIChild_1)GetGroupBox();
        }

但它会出现像屏幕一样的错误:

Screenshot - 1

Screenshot - 2

Screenshot - 3

1 个答案:

答案 0 :(得分:1)

快速而肮脏的方法:

在每个MDI子窗体上创建一个方法,如下所示:

// suppose this mdi child is called FormMDIChild_1

public GroupBox GetGroupBox()
{
   return Groupbox1;
}
MDI Parent中的

执行此操作:

if (ActiveMdiChild is FormMDIChild_1)
{
    GroupBox myGroupBox = ((FormMDIChild_1)ActiveMdiChild).GetGroupBox();
}

更好的解决方案:

创建一个MDI Child并将其调用为例如FormBaseMDIChild
在此FormBaseMDIChild上创建一个虚方法

public virtual GroupBox GetGroupBox()

从FormBaseMDICHild继承所有其他MDI Childs表单并覆盖方法GetGroupBox()

在MDI Parent中执行此操作

myGroupBox = ((FormBaseMDICHild)ActiveMdiChild).GetGroupBox();