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

本文关键字:方法 表单 访问表 变量 反之亦然 访问 | 更新日期: 2023-09-27 18:10:20

我正试图找到一种方法来访问一个表单和一个类的方法和变量从对方使用实例。下面是我的代码:

我的表单代码是:
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#中,从类访问表单方法和变量,反之亦然

这将永远不会设置属性:

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

然后你可以在click事件中调用它:

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 ?"