Call方法不起作用

本文关键字:不起作用 方法 Call | 更新日期: 2023-09-27 18:10:04

我做了一个"start"类,一个form类和一个Adder类。

我想添加项目到listBox1在Form1从加法类…

…但它没有!

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

我知道我调用AddValue()函数在类Form1(然后它工作…我不知道为什么),但我想从另一个类做,因为那不是孔程序,只有那块产生问题。

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

Call方法不起作用

不完全确定你的设计,但这将解决它:

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

then in your click:

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

Adder类没有添加到Form1的同一个实例中。试着这样修改:

公共类Adder{

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

你在一个新的Form1实例上调用AddValue

相反,创建一个静态属性,返回您在Application.Run期间创建的实例的主表单

Program类中声明

public static Form1 MainForm { get; private set; }

把你的Application.Run换成这个

MainForm = new Form1();
Application.Run(MainForm);

你可能还想让你的Program类公开。

最后在你的Adder.Add方法中,你必须从你的Program类中调用MainForm属性。

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

当然,这里有一些东西我希望看到修改,除非你真的需要每次都有一个新的Adder实例,然后将Add方法声明为静态,或者将整个类声明为静态,就像这样

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

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

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

#Edit - 1

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

示例1

public class Adder
{
    private Form1 _form1;
    public Adder(Form1 form1)
    {
        _form1 = form1;
    }
    public void Add()
    {
        _form1.AddValue("sfdg");
    }
}
示例2

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

如果你打算在Adder中使用form1多个位置,我会说使用示例1,否则使用示例2

#Edit - 2

要详细说明你的实际代码,那么你必须替换它以使其"工作"是这样的。

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