2017-08-15 57 views
-1

我正在做c#应用程序,我需要从另一个类的部分类访问方法。c#调用另一个类的部分调用方法

更具体地说,我想将项目添加到不同于部分类但位于相同名称空间的类的listview中。

我想是这样的:

public partial class Aa : Form 
{ 
    public static void UpdateListView(string[] array) 
    { 
     if (ProcessNetUsageList.InvokeRequired) 
     { 
      ProcessNetUsageList.Invoke(new Action<string[]>(UpdateListView), array); 
     } 
     else 
     { 
      ListViewItem item = new ListViewItem(array[0]); 
      for (int i = 1; i < 4; i++) 
       item.SubItems.Add(array[i]); 
      ProcessNetUsageList.Items.Add(item); 
     } 
    } 
} 

,然后从喜欢另一个类访问:

class Test 
{ 
    test() 
    { 
     ProgramName.Aa.UpdateListView(someArray); 
    } 
} 

但它给了一个错误,因为静态方法只能访问静态变量,而我的列表视图心不是静态(我在vs设计器中创建了该列表视图)。

如果我从局部类的方法去除static关键字的话,我不能访问它。我试图创建部分类,但没有success.Any想法实例是值得欢迎的

:IM在我UpdateListView使用调用方法,因为稍后将在新线程上运行

+4

''我试图创建部分类的实例,但没有成功。“' - 那么,你尝试了什么?因为要访问对象的实例,您确实需要该对象的实例。那么表单的实例在哪里? – David

回答

0

面向对象语言的本质访问方法是对象不具有普遍的访问和修改其他对象。这是好东西

您提供的代码相对较少,因此很难在此提供完美的答案,但有几个范例可以解决此问题。

一是实例传递到您的测试类,像这样:

class Test 
{ 
    test(ProgramName.Aa form) 
    { 
     form.UpdateListView(someArray); 
    } 
} 

或者,如果类test实际上包含ListView,你可以传递一个静态方法Aa

class Test 
{ 
    ListView someListView; 
    test() 
    { 
     ProgramName.Aa.UpdateListView(someListView, someArray); 
    } 
} 

最终,您应该考虑这些对象之间的逻辑关系,以确定这些对象应如何通信。

0

从UpdateListView中删除静态关键字,如以前所做的那样。在test()中,您需要在访问UpdateListView之前实例化Aa。

Aa temp = new Aa() 

然后,您可以通过使用

temp.UpdateListView(someArray); 
+0

我也尝试过,但它给了我“嵌入式语句加农炮声明或标记语句” –

+0

您的答案具有误导性,因为简单地创建一个类型为'Aa'的新对象将导致一个空对象。这与示例中的不一样。有它自己的(可能是空的)ListView –