2015-02-08 93 views
0

我必须在Class1中调用方法Run。现在我试着将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) 
    { 

    } 
} 

更新如何调用类方法

佛马币

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

你不告诉你如何调用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列表框:

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

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

感谢为答复。现在我将尝试你的代码。我在我的问题中添加了更新,并解释了我如何称为'运行' – user3650075 2015-02-08 11:20:53

+0

不,您不需要为此进行反思。 – CodeCaster 2015-02-08 11:21:29

0

如果您要添加的str反对Running列表中类class1你应该得到一个参考Form1的活性形式:

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

通过将'Class1'绑定到'Form1',您可以主动防止代码重用。 – CodeCaster 2015-02-08 11:09:43

+0

感谢您的回复,我收到警告,由于其保护级别,“运行”不可用。我试图改变'私人' - >'公共',但它没有帮助。 – user3650075 2015-02-08 11:13:00

+0

@CodeCaster的确我是,我只是给出了一个快速的问题的答案 – AymenDaoudi 2015-02-08 11:22:38

相关问题