如何将值传递给列表框到另一个类

时间:2015-02-08 10:45:20

标签: c#

我必须在Run中调用方法Class1。现在我尝试将str返回到列表框Running。我知道这段代码Running.Items.Add(str);不正确,因为它在不同的类中。请告诉我如何解决它?

的Class1.cs

class Class1
{
    public void Run()
    {
        string str = "Hello";
        Running.Items.Add(str);
    }
}

Form1.cs的

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

    private void Running_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}
  

更新如何调用类方法

Form1中

    public void Invoke(string typeName, string methodName)
    {
        Type type = Type.GetType(typeName);
        object instance = Activator.CreateInstance(type);
        MethodInfo method = type.GetMethod(methodName);
        method.Invoke(instance, null);
    }

    private void Start_Click(object sender, EventArgs e)
    {
        new Task(() => { Invoke("Worker." + name, "Run"); }).Start();
    }

2 个答案:

答案 0 :(得分:2)

您没有显示您致电Run()的方式,因此我假设您是从Form1开始这样做的。

您需要以某种方式传递引用。让你的班级Class1依赖于你的表格是一个坏主意。您可以使其依赖于lsitbox,并相应地重命名它:

public class ListBoxAdder()
{
    private ListBox _listBox;
    public ListBoxAdder(ListBox listBox)
    {
        _listBox = listBox;
    }

    public void Run()
    {
        string str = "Hello";
        _listbox.Items.Add(str);
    }
}

然后从表单中调用它并将引用传递给Running ListBox:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var listBoxAdder = new ListBoxAdder(this.Running);
        listBoxAdder.Run();
    }
}

答案 1 :(得分:0)

如果您要将str对象添加到课程Running中的class1列表中,您应该只获得对Form1的活动表单的引用:< / p>

public void Run()
{
      string str = "Hello";
      ((Form1)Form1.ActiveForm).Running.Items.Add(str);
}