我是 C# 语言的新手。我创建了一个用户表单并在其上添加了一个 ListView (将其更改为公共(public))。现在我添加了一个像这样的静态类
public static class listView
{
private static ListView.ListViewItemCollection litm;
public static ListView.ListViewItemCollection listItems
{
get
{
Form1 frm = new Form1();
return frm.listView1.Items;
}
set
{
litm = value;
}
}
}
现在在按钮后面添加了以下代码,
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(listView.listItems.Count.ToString()); //Works
listView.listItems.Add("Fail"); //Fails
this.listView1.Items.Add("HH"); //Works
}
在这里,我可以使用获取项目数。我认为 get
有效。但是当我尝试添加新项目时,它什么也没做。没有错误,但没有添加条目。
我有兴趣了解为什么会发生这种情况。任何指导表示赞赏。
最佳答案
在属性的 getter 中,您正在创建表单 1 的新实例并向其中添加项目。
它与静态或非静态无关。
看看这个:
get
{
Form1 frm = new Form1();
return frm.listView1.Items;
}
所以当你
listView.listItems.Add("Fail");
您正在将项目添加到表单 1 的 ListView 中,但您看不到它。
事实上,每次访问 listView.listItems
属性时,您都会创建表单 1 的新实例并向其 listview1 添加一个项目。
但是在这一行中:
this.listView1.Items.Add("HH");
您正在将项目添加到您所看到的 ListView 中。
了解静态:
关于C# 无法理解静态属性如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32489331/