我在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 });
答案 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);