如何访问我的ListView以在C#上的单独类中添加项目

时间:2014-06-16 16:10:51

标签: c# winforms

我在Form1上有一个ListView项,我有一个名为Common的独立类来处理一些函数。我的问题是我无法直接访问它来添加项目。试图找到一些有用的资源,但仍然无法使其发挥作用。这是我的代码:

Form1中

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

        public void tempAddToList( ListViewItem items )
        {

            ListView1.Items.AddRange(new ListViewItem[] { items });

        }
    }
}

Common.cs

namespace myTest
{
    class Common
    {
        private Form1 mainForm;

        public Common()
        {

        }
        public Common(Form1 mMainForm)
        {
            mainForm = mMainForm;
        }

        ListViewItem item1 = new ListViewItem("1");
        item1.SubItems.Add("1");
        item1.SubItems.Add("2");
        item1.SubItems.Add("3");
        item1.SubItems.Add("4");
        item1.SubItems.Add("5");
        item1.SubItems.Add("6");
        item1.SubItems.Add("7");
        item1.SubItems.Add("8");

        mainForm.tempAddToList(item1);
    }
}

基本上调用 mainForm.tempAddToList(item1); 不起作用。我总是得到

类型' System.NullReferenceException'的未处理异常发生在myTest.exe中 附加信息:未将对象引用设置为对象的实例。

其他问题:我可以从Form1访问ListView1,以便我可以直接在Common上调用和添加吗?例如

ListViewItem item1 = new ListViewItem("1");
item1.SubItems.Add("1");
item1.SubItems.Add("2");
item1.SubItems.Add("3");
item1.SubItems.Add("4");
item1.SubItems.Add("5");
item1.SubItems.Add("6");
item1.SubItems.Add("7");
item1.SubItems.Add("8");
Form1.ListView1.Items.AddRange(new ListViewItem[] { items });

2 个答案:

答案 0 :(得分:1)

您的代码无效 添加到ListViewItem的代码行应该在Common

类的方法中
namespace myTest
{
    class Common
    {
        private Form1 mainForm;

        public Common()
        {

        }
        public Common(Form1 mMainForm)
        {
            mainForm = mMainForm;
        }

        public void AddItemToListView()
        {
            if(mainForm == null)
                throw new InvalidOperationException("Class instance intialized with wrong constructor!");

            ListViewItem item1 = new ListViewItem("1");
            item1.SubItems.Add("1");
            item1.SubItems.Add("2");
            item1.SubItems.Add("3");
            item1.SubItems.Add("4");
            item1.SubItems.Add("5");
            item1.SubItems.Add("6");
            item1.SubItems.Add("7");
            item1.SubItems.Add("8");

            mainForm.tempAddToList(item1);
        }
    }
}

现在,当你有一个Form1实例可用时,你可以写一下

 Common cm = new Common(instanceOfForm1);
 cm.AddItemToListView();

请注意,您需要使用构造函数构造Common类的实例,该构造函数接受Form1的实例,否则调用null实例将引发NullReference异常。 在将项目添加到ListView之前进行检查可以保护您的代码免受此异常的影响。

答案 1 :(得分:0)

你永远不会调用mainFormObject mMainForm。而不是

mainForm.tempAddToList(item1);

尝试

mMainForm.tempAddToList(item1);