调用方法无效
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");
}
}
我做了一个 "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");
}
}