C# 从不同的窗体访问函数

C# 从不同的窗体访问函数,c#,C#,在我的程序中,我有两种形式。主表格和您填写额外信息的表格。我想做的是,当按下“ok”按钮时,在列表框中写出第二个表单上给出的信息 目前我拥有的是: 主要形式: public void writeLine() { foreach (var item in VarClass.listItems[VarClass.count - 1]) { listBox1.Items.Add(item.ToString()); } } 第二种形式: Form1.writeL

在我的程序中,我有两种形式。主表格和您填写额外信息的表格。我想做的是,当按下“ok”按钮时,在列表框中写出第二个表单上给出的信息

目前我拥有的是: 主要形式:

public void writeLine()
{
    foreach (var item in VarClass.listItems[VarClass.count - 1])
    {
        listBox1.Items.Add(item.ToString());
    }
}
第二种形式:

Form1.writeLine();
因此,我在“Form1.writeLine();”处得到以下错误 非静态字段、方法或属性需要对象引用


我可以通过在主窗体中设置'writeLine()'静态来解决这个问题,但是在主窗体中的'listBox1'上也会出现同样的错误。如何修复此问题?

创建
Form1
的实例并调用该方法。代码如下:

new Form1().writeLine();

您应该将主窗体的引用传递给第二个窗体,并调用该引用上的方法。例如,您可以在第二个窗体上创建属性,如
private form\u mainForm
并创建第二种形式的构造函数以接收该引用并设置为该字段。之后,您可以在第二个表单中调用
\u mainForm.writeLine()

有几种方法可以处理此问题。一种是form2最好通过接口而不是具体类的引用返回调用表单的引用


另一个选项是Form2有一个form1可以订阅的事件,该事件将通知form1 Form2有一些输出。

保留对第一个表单的第二个表单的引用:

public MyFirstForm
{
    ...

    public MyFunction()
    {
        MySecondForm secondForm = new MySecondForm();

        // ... Open your form etc, look for when it's complete and then ...

        // Read the values from the second form into the first
        var MyValues = secondForm.getValues();

        // Now populate the list-box with the information returned.
        //for (my listbox)
    }
}

您的第二个表单需要引用第一个表单。这是一个触及面向对象编程核心的问题。您需要对实例化(即:创建)的实际表单对象的引用。Form1是类,而不是这里的对象。