调用方法无效

Call method doesn't work

我做了一个 "start" class,表格 class 和加法器 class。

我想从加法器向 Form1 中的 listBox1 添加项目 class...

...但它没有做到!

没有错误或类似的错误,当我调试它时,它似乎可以工作,但是单击按钮 2 后列表框中没有任何项目(我会在代码中标记它)

我知道我在 class Form1 中调用了 AddValue() 函数(然后它起作用了......我不知道为什么),但我想从另一个 class,因为那不是坑程序,只是出问题的那一块。

namespace WindowsFormsApplication4
{         

public partial class Form1 : Form
{
    ProcessStartInfo processInfo;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string command2 = "ipconfig";
        string command = "telnet " + comboBox1.Text + " 13000";
        processInfo = new ProcessStartInfo("cmd.exe", "/k " + command2);
        Process process = Process.Start(processInfo);
    }

    public void AddValue(string value)
    {
        listBox1.Items.Add(value);
    }

    private void button2_Click(object sender, EventArgs e) // here it "starts"
    {
        Adder adder_objet = new Adder();
        adder_objet.Add();
    }
}
public class Adder
{

    public void Add()
    {
        Form1 form1_objet = new Form1(); 
        form1_objet.AddValue("sfdg");
    }

}
}

Adder class 没有添加到 Form1 的同一个实例。尝试这样修改它:

public class 加法器 {

public void Add(Form1 form1_objet)
{
    form1_objet.AddValue("sfdg");
}

}

然后这样称呼它:

private void button2_Click(object sender, EventArgs e) // here it "starts"
    {
        Adder adder_objet = new Adder();
        adder_objet.Add(this);
    }

不完全确定您的设计,但这会解决它:

public class Adder
{

    public void Add(Form1 myForm)
    {
        myForm.AddValue("sfdg");
    }

}

然后在您的点击中:

private void button2_Click(object sender, EventArgs e) // here it "starts"
{
    Adder adder_objet = new Adder();
    adder_objet.Add(this);
}

您正在 Form1 的新实例上调用 AddValue

而是创建一个静态 属性,returns 您在 Application.Run

期间创建实例的主窗体

在您的 Program class

中声明
public static Form1 MainForm { get; private set; }

并用这个

替换你的Application.Run
MainForm = new Form1();
Application.Run(MainForm);

您可能还想使您的 Program class public.

最后,在您的 Adder.Add 方法中,您必须从 Program class.

中调用 MainForm 属性
public class Adder
{
    public void Add()
    {
            Form1 form1_objet = new Form1(); 
        form1_objet.AddValue("sfdg");
    }
}

当然有一些我希望在这里修改的东西,除非你真的每次都需要一个新的 Adder 实例,然后将 Add 方法声明为静态的,也许 class作为一个整体,像这样

public static class Adder
{
    public static void Add()
    {
        Form1 form1_objet = new Form1(); 
        form1_objet.AddValue("sfdg");
    }
}

当然上面的一些取决于你将如何使用它等

到目前为止,这应该是您想要做的。

#编辑 - 1

你也可以将 Form1 作为变量传递给你的 Adder class 如果你不希望它是静态的或将它传递给 Add 方法。

Example 1

public class Adder
{
    private Form1 _form1;

    public Adder(Form1 form1)
    {
        _form1 = form1;
    }

    public void Add()
    {
        _form1.AddValue("sfdg");
    }
}

Example 2

public class Adder
{
    public void Add(Form1 form1)
    {
        _form1.AddValue("sfdg");
    }
}

如果你要在 Adder 中不止一处使用 form1,我会说使用 示例 1,否则使用 [=69] =]例子2.

#编辑 - 2

详细说明您的实际代码,然后您必须替换什么才能获得它 "working" 是这个。

private void button2_Click(object sender, EventArgs e) // here it "starts"
{
    Adder adder_objet = new Adder();
    adder_objet.Add();
}

private void button2_Click(object sender, EventArgs e) // here it "starts"
{
    Adder adder_objet = new Adder();
    adder_objet.Add(this);
}

public class Adder
{

    public void Add(Form1 form1_object)
    {
        form1_objet.AddValue("sfdg");
    }

}