【问题标题】:Pass windows form instance as parameter将 windows 窗体实例作为参数传递
【发布时间】:2014-01-02 13:24:11
【问题描述】:

我有 windows 窗体,它正在调用另一个类的方法,需要作为参数传递。

public partial class Form1 : Form
    {                
        private myClass _myClass;       

        public Form1()
        {
            InitializeComponent();
            _myClass = new myClass(//pass this instance - Form1 - as parameter)
        }
    }

但我不知道如何将 Form1 实例作为参数传递?我需要这样做,因为这个其他类正在创建系统托盘图标和菜单条,并且能够关闭父窗体。

【问题讨论】:

标签: c# winforms


【解决方案1】:

你会这样做:

_myClass = new myClass(this);

然后改变myClass中的构造函数:

public class myClass
{
    private Form1 theForm;

    public myClass(Form1 theForm)
    {
        this.theForm = theForm;
    }

    ...
}

现在您可以在班级内访问该表格。我想我会避免这样做。尝试让表单负责调用类并确定它何时应该自行关闭。

让类保留对实例化它的表单的引用,并从类中关闭它似乎可能会导致混乱和可维护性问题。

【讨论】:

  • 所以你是在建议我不要将表单作为参数传递给类?起初我想将我的表单作为参考参数传递。
  • 这个类是系统托盘——它应该在按下按钮时打开和关闭窗体。我想在打开或关闭表单时,我不会对表单本身进行任何修改。这就是为什么我需要参考。
【解决方案2】:

只需在对方的类构造函数中声明一个Form类型的参数即可:

public class myClass
{
    private Form otherForm;

    public myClass(Form form) 
    {
        otherForm = form;
    }
}

并从Form1 内部调用它:

_myClass = new myClass(this);

【讨论】:

    【解决方案3】:

    我无法弄清楚你想要实现什么。但是如果你只是想传递这个表单,那么你可以使用它。

    _myClass = new myClass(this);
    

    【讨论】:

      【解决方案4】:

      当然可以:

      _myClass = new myClass(this);
      

      【讨论】:

      • 我们实际上不能,因为它包含只读属性并在 c# 中生成语法错误
      【解决方案5】:

      除非我遗漏了什么,否则这应该相当简单:

          public Form1(myClass instance)
          {
              InitializeComponent();
              _myClass = instance;
          }
      

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2013-12-17
        • 2013-06-23
        • 2020-04-04
        • 1970-01-01
        • 2020-08-14
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        相关资源
        最近更新 更多