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");
}
}
}
不完全确定你的设计,但这将解决它:
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");
}
}