【问题标题】:Create Form with method class constructor C#使用方法类构造函数 C# 创建表单
【发布时间】:2021-10-17 07:07:03
【问题描述】:

我有一个类,方法如下:NewForm

class cFormInteraction
{
    public static void NewForm(Form fm)
    {
        if (fm is null)
        {
            fm = new Form();
            fm.Show();
        }
    }
}

formMain,我想用如下代码创建我想要的表单:

public static FormWantToShow FW;  
private void button1_Click(object sender, EventArgs e)
    {
        cFormInteraction.NewForm(FW);
    }

我想解决问题:

if (fm is null)
        {
            fm = new Form(); // -> How i make the program understand and new the form i transmisson in.
            fm.Show();
        }

【问题讨论】:

    标签: c# winforms class oop methods


    【解决方案1】:

    假设您要显示的每个表单都有一个无参数构造函数,您可以通过带有ref 参数的泛型方法来做到这一点。

    通用方面允许NewForm 方法知道要创建什么表单类型,ref 参数允许调用代码存储对要存储在字段中的新创建表单的引用。

    static class FormInteraction
    {
        public static void NewForm<T>(ref T fm)
            where T : Form, new()
        {
            if (fm is null)
            {
                fm = new T();
                fm.Show();
            }
        }
    }
    

    然后在调用代码中:

    public static FormWantToShow form;  
    private void button1_Click(object sender, EventArgs e)
    {
        FormInteraction.NewForm(ref form);
    }
    

    (我已更改名称以遵循正常的 C# 命名约定。)

    【讨论】:

      【解决方案2】:

      在我看来,在 NewForm 方法中检查 null 似乎有点令人困惑。

      该方法的名称是NewForm,而实际上它可能不会创建表单,这似乎也很奇怪。

      奇怪的是,它也显示了表单,而名称中却没有。

      在我看来,代码应该是这样的:

      static class FormInteraction
      {
          public static T NewAndShowForm<T>()
              where T : Form, new()
          {
              var fm = new T();
              fm.Show();
              return fm;
          }
      }
      

      那么你可以这样称呼它:

      public static FormWantToShow form;
      private void button1_Click(object sender, EventArgs e)
      {
          if (form != null)
          {
              form = FormInteraction.NewAndShowForm<FormWantToShow>();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 1970-01-01
        • 2016-02-09
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多