如何在C#中从另一个窗体访问一个对象?

4
假设我有“Form1”和“Form2”,两者都是表单。在Form1中,有主类和主方法。
在Form1中,我创建了一个对象,如下所示:
public myobject ob1 = new myobject();

但是,在Form2中,我有以下代码:
 private void bdCancelar_Click(object sender, EventArgs e)
    {
        ob1.status = 1; // I can't access ob1 !!!
    }

有需要帮忙的吗?
谢谢。

你想要做什么?正确的答案取决于此。一般来说,你需要一个 Form1 的实例,但在你的情况下可能是不可能的。 - Michael Sagalovich
1个回答

6

您需要一个 Form1 的实例。通常情况下,如果您已经显示了这个窗体,那么您已经实例化了它(Form1 form1 = new Form1())。然后,您可以在此实例上操作并访问公共成员:

form1.ob1.status = 1;

另一种可能性是让您的Form2构造函数接受一个Form1实例:

public class Form2: Form
{
    private readonly Form1 _form1;
    public Form2(Form1 form1)
    {
        _form1 = form1;
    }

    private void bdCancelar_Click(object sender, EventArgs e)
    {
        _form1.ob1.status = 1;
    }
}

当你在 Form1 中想要创建并显示 Form2 时:

var form2 = new Form2(this);
form2.ShowDialog();

@dysoco,在这种情况下,您可以在实例化Form2时将此form1实例传递给其构造函数。这样,您就可以访问它了。我已经更新了我的答案,提供了一个示例。 - Darin Dimitrov
你能再解释一下吗?我在 Form2 中使用 "Form1 form1 = new Form1()" 吗? - dsocolobsky
@dysoco,“它说”?你能否更具体一些,例如发布您正在获取的确切错误消息以及您尝试编译/运行的代码? - Darin Dimitrov
@dysoco,好的,那么请发布你的整个代码,因为你似乎缺少一些C#基础知识,比如用;结束语句。 - Darin Dimitrov
@DarinDimitrov...我已经更改了它们,但我没有编译它,我只是复制了错误,我知道如何修复分号。 - dsocolobsky
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接