在表单之间传递数据

时间:2008-12-27 10:50:05

标签: c# winforms

我有以下情况 我有一个主表单作为MDI父表单和MDI子表单,子表单显示一个新表单(我称之为mydialog)。 我想从mydialog访问MDI子窗体中的特定函数,所以我试图在mydialog对象中设置Owner属性但是发生了异常(循环引用异常),mydialog形式的Parent和ParentForm特性也是null,我做了一个快速的使用mydialog的Tag属性的脏soluion。 我正在寻找一个更好的解决方案,以及为什么在设置mydialog

的Owner属性时会出现异常

6 个答案:

答案 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或“拉”来自所有者的数据更好。因为这两者都需要明确的铸造,因此不是特别优雅。