繁体   English   中英

从C#中的类访问表单方法和变量,反之亦然

[英]Access form methods and variables from a class and vice versa in C#

我试图找到一种方法,可以使用实例互相访问形式和类的方法和变量。 这是我的代码:

我的表单代码是:

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事件中调用类方法! 请问我的代码有什么问题?

这将永远不会设置该属性:

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();
}

那是因为您对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 ?”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM