【问题标题】:Access form methods and variables from a class and vice versa in C#在 C# 中从类访问表单方法和变量,反之亦然
【发布时间】:2014-06-25 01:26:09
【问题描述】:

我正在尝试找到一种方法来使用实例访问表单和类的方法和变量。这是我的代码:

我的表单代码是:

public partial class Form1 : Form
{
    int var1 = 0;

    public Form1()
    {
        InitializeComponent();
        Glob glob = new Glob(this);
    }

    private void button1_Click(object sender, EventArgs e)
    {

    }
}

我的课程代码是:

public class Glob
{
    private Form1 _form;

    public Glob(Form1 parent)
    {
        _form = parent;
    }

    public int Func1()
    {
        return 10;
        _form.var1 = 10;
    }
}

我可以从我的类中调用表单方法,但我不能从button1_Click 事件中调用类方法!请问我的代码有什么问题?

【问题讨论】:

    标签: c# winforms methods


    【解决方案1】:

    这永远不会设置属性:

    public int Func1()
    {
        return 10;
        _form.var1 = 10;
    }
    

    函数在属性设置之前返回。您应该会收到 unreachable code 警告。

    另外,您的 var1 变量是私有的。您需要将其公开(也将其大写)。这样就可以在其声明的位置之外访问它:

    public int Var1 { get; set; }
    

    此外..您希望您的 Glob 实例为表单级别:

    private Glob _glob;
    
    public Form1()
    {
        InitializeComponent();
        _glob = new Glob(this);
    }
    

    那么就可以在点击事件中调用:

    private void button1_Click(object sender, EventArgs e)
    {
        _glob.Func1();
    }
    

    【讨论】:

      【解决方案2】:

      那是因为glob 的作用域是构造函数的本地范围。将其声明为模块级变量,它就可以正常工作了。

      public partial class Form1 : Form
      {
          int var1 = 0;
          Glob glob;
      
          public Form1()
          {
              InitializeComponent();
              glob = new Glob(this);
          }
      
          private void button1_Click(object sender, EventArgs e)
          {
              glob.Func1();
          }
      }
      

      [编辑]

      Simon Whitehead 的回答更详细地说明了您遇到的其他问题,但我的回答解决了您的具体问题“为什么我不能通过单击按钮拨打 glob?”

      【讨论】:

        猜你喜欢
        • 2018-02-10
        • 1970-01-01
        • 2012-11-09
        • 2017-01-08
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多