我有以下情况 我有一个主表单作为MDI父表单和MDI子表单,子表单显示一个新表单(我称之为mydialog)。 我想从mydialog访问MDI子窗体中的特定函数,所以我试图在mydialog对象中设置Owner属性但是发生了异常(循环引用异常),mydialog形式的Parent和ParentForm特性也是null,我做了一个快速的使用mydialog的Tag属性的脏soluion。 我正在寻找一个更好的解决方案,以及为什么在设置mydialog
的Owner属性时会出现异常答案 0 :(得分:1)
所以我尝试在mydialog对象中设置Owner属性但是发生了异常(循环引用异常)
设置Owner属性时应该没有异常。你能粘贴例外吗?你也可以粘贴设置此值的代码吗?您是否设置了其他属性,如MDIParent / etc?
编辑:代码更新
尝试以下操作,它应该可以正常工作
groupsettingsform mydialog= new groupsettingsform(); //create dialog
mydialog.Owner= this; //set owner MDI child form
mydialog.ShowDialog(); // <== DO NOT PASS THE OWNER
答案 1 :(得分:0)
您能否向我们展示您用于显示对话框的代码,其中一个ShowDialog方法将父对象作为参数,可以执行您要查找的内容。
答案 2 :(得分:0)
您可以在MyDialog中创建参数化构造函数
public MyDialog(object param1)
将您的数据传递为
MyDialog frm = new MyDialog("data");
frm.ShowDialog();
或在MyDialog中创建一个公共属性
public object Data {get; set;}
并在实例化对话框时设置此项
MyDialog frm = new MyDialog(); frm.Data =“你的数据在这里”; frm.ShowDialog();
HTH,
答案 3 :(得分:0)
设置所有者不应该抛出异常......在你的MyDialog表单中试试这个
((YourMDIChildForm)Owner).YourMDIChildFormMethod();
答案 4 :(得分:0)
到目前为止我的简单回答是使用Tag属性,但我认为有更好的方法
groupsettingsform mydialog = new groupsettingsform(); mydialog.Tag = this; mydialog.ShowDialog(本);
答案 5 :(得分:0)
我更喜欢通过构造函数将任何自定义数据或参数传递给Form。它是最少的“WinForms”特定方式,实际上与构建大多数其他对象无异。
在其他情况下,我喜欢在表单上设置属性。这似乎也是一个WinForms惯例。
这比使用Tag或“拉”来自所有者的数据更好。因为这两者都需要明确的铸造,因此不是特别优雅。