【问题标题】:How to call a function in a settings form from my main form?如何从我的主窗体调用设置窗体中的函数?
【发布时间】:2011-09-18 22:39:25
【问题描述】:

我的项目中有两个表单,

  1. 主窗体
  2. 设置表单

我需要从主窗体调用设置窗体中的事件的方法。我的主窗体有闪屏(在构造函数中),所以我无法创建主窗体的实例来调用该方法。

有什么方法可以在不调用主窗体的构造函数的情况下调用函数?或者还有其他方法可以实现吗?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您可以将 Main 表单作为构造函数参数发送到 Settings 表单(假设 Settings 是从 Main 调用的)。

    更好的方法是将Func<...>Action<...> 发送到“设置”表单并让它调用它。

    ...
    
    public Settings(Action<int> myAction)
    {  
        _myAction = myAction;
    }
    
    
    ...
        _myAction(5);
    
    ...
    

    【讨论】:

    • 我是这个 C# 世界的新手。你能再解释一下吗?动作/功能表示我的主要形式的方法? myAction 是主窗体的实例吗?请帮助
    • @Deepa: myAction 是您希望设置表单调用的方法。如果这是你的背景,它类似于 C 中的函数指针。
    【解决方案2】:

    您可以设置一个单例类来保存您需要从表单中调用的常用函数。

    关于 C# 中单例的一些信息 http://msdn.microsoft.com/en-us/library/ff650316.aspx

    【讨论】:

      【解决方案3】:

      在主窗体中保留对 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多