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

时间:2014-06-25 01:26:10

标签: c# winforms methods

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

我的表单代码是:

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

2 个答案:

答案 0 :(得分:2)

这永远不会设置属性:

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

答案 1 :(得分:1)

那是因为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的具体问题?”