我有一个主窗体和一个子窗体。子表单由主表单中的 4 个不同的表单事件激活,并根据触发它的事件重新设计。但不是使用全局布尔值来确定触发了哪个事件,有没有办法将参数直接传递给子表单?
谢谢!
您可以将公共成员添加到子表单。方法或属性。例如
public void ProcessEvent(int eventNumber)
{
switch (eventNumber) {
case 1:
// Process event #1
break;
case 2:
// Process event #2
break;
case 3:
// Process event #3
break;
case 4:
// Process event #4
break;
}
}
在主窗体中,您可以这样称呼它:
mySubform.ProcessEvent(1);
(注意:在 WinForms 中,您不会使用子表单,而是使用UserControl
.)
或者在子表单中使用属性:
public int EventNumber { get; set; }
在主窗体中,您可以这样设置:
mySubform.EventNumber = 1;
在子表单中,您可以像这样简单地访问它
if (EventNumber == 1) { ... }
注意:表单、子表单和控件只是类,你可以用它们做所有你可以用“普通”类做的事情。
更新
根据您的评论之一,您使用的不是子表单而是对话框表单。我会将放置在(不在上面)另一个表单上的表单(UserControl 或 MDI 表单)称为子表单。你可以这样称呼它:
var fldg = new MyDialogForm{ EventNumber = 1 }; // Using the property described above.
fdlg.ShowDialog(this);
另一种选择是将参数传递给子表单的构造函数
private int _eventNumber;
public MyDialogForm(int eventNumber) // Constructor
{
_eventNumber = eventNumber;
}
你会这样称呼它:
var fldg = new MyDialogForm(1); // Pass the argument to the constructor.
fdlg.ShowDialog(this);