用作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();
}
但它会出现像屏幕一样的错误:
答案 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();