【发布时间】:2011-09-18 22:39:25
【问题描述】:
我的项目中有两个表单,
- 主窗体
- 设置表单
我需要从主窗体调用设置窗体中的事件的方法。我的主窗体有闪屏(在构造函数中),所以我无法创建主窗体的实例来调用该方法。
有什么方法可以在不调用主窗体的构造函数的情况下调用函数?或者还有其他方法可以实现吗?
【问题讨论】:
我的项目中有两个表单,
我需要从主窗体调用设置窗体中的事件的方法。我的主窗体有闪屏(在构造函数中),所以我无法创建主窗体的实例来调用该方法。
有什么方法可以在不调用主窗体的构造函数的情况下调用函数?或者还有其他方法可以实现吗?
【问题讨论】:
您可以将 Main 表单作为构造函数参数发送到 Settings 表单(假设 Settings 是从 Main 调用的)。
更好的方法是将Func<...> 或Action<...> 发送到“设置”表单并让它调用它。
...
public Settings(Action<int> myAction)
{
_myAction = myAction;
}
...
_myAction(5);
...
【讨论】:
myAction 是您希望设置表单调用的方法。如果这是你的背景,它类似于 C 中的函数指针。
您可以设置一个单例类来保存您需要从表单中调用的常用函数。
关于 C# 中单例的一些信息 http://msdn.microsoft.com/en-us/library/ff650316.aspx
【讨论】:
在主窗体中保留对 SettingForm 实例的引用。
SettingsForm mySettingsForm;
public MainForm(SettingsForm settingsForm)
{
_mySettingsForm = settingsForm;
}
private void CallSettingsFormMethods()
{
_mySettingsForm.CallAnyPublicMethod();
}
在创建 MainForm 实例时,创建一个 SettingsForm 实例并将其传递给 MainForm。除非您调用 Show 或 ShowDialog 方法,否则 SettingsForm 将不可见。
SettingsForm settingsForm = new SettingsForm();
MainForm myMainForm = new MainForm(settingsForm);
myMainForm.Show();
【讨论】: