2012-07-03 22 views
11

我正在学习如何在windowsForm中使用listView,我遇到了一些我希望在此解决的问题。的第一件事是,当我创建的列与下面的代码:在listView中创建列并添加项目

private void initListView() 
    { 
     // Add columns 
     lvRegAnimals.Columns.Add("Id", -3,HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Name", -3, HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Age", -3, HorizontalAlignment.Left); 
    } 

当我运行该程序,列的名称是不可见的,他们都是在左上角,我必须“拖动”它们才能阅读文本。我做错了什么?

最后我不知道如何将项目添加到列。我是否首先创建一个对象,如

ListViewItem item1 = new ListViewItem(???); 
item1.SubItems.Add("text"); 

是每个listViewItem对象的一列还是一行?我如何添加信息行?请提供一些帮助!谢谢!

回答

31

你的第一个问题是你传递-3到Columns.Add的第二个参数。它需要为-2来自动调整列的大小。来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columns.aspx(看看在底部的代码示例中的注释)

private void initListView() 
{ 
    // Add columns 
    lvRegAnimals.Columns.Add("Id", -2,HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 
} 

你也可以用其他的过载,添加(字符串)。 E.g:

lvRegAnimals.Columns.Add("Id"); 
lvRegAnimals.Columns.Add("Name"); 
lvRegAnimals.Columns.Add("Age"); 

参考更多的重载:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnheadercollection.aspx

其次,将项目添加到ListView,需要创建一个ListViewItem的实例并将它们添加到ListView的Items集合。您将需要使用字符串[]构造函数。

var item1 = new ListViewItem(new[] {"id123", "Tom", "24"}); 
var item2 = new ListViewItem(new[] {person.Id, person.Name, person.Age}); 
lvRegAnimals.Items.Add(item1); 
lvRegAnimals.Items.Add(item2); 

您还可以将对象存储在项目的Tag属性中。

item2.Tag = person; 

然后你就可以提取它

var person = item2.Tag as Person; 

让我知道,如果你有任何问题,我希望这有助于!

+0

感谢您的帮助!我将在稍后或明天尝试此代码。如果我对此有疑问,也许我会回到你身边。 –

+0

它没有用于隐式类型化字符串数组的任何重载构造函数? – Charlie

+1

@Charlie,我假设你指的是ListViewItem的重载构造函数?如果要使用构造函数创建带有子项的ListViewItem,则可以使用字符串[]重载或ListViewSubItem []重载。我使用新的[]而不是新的字符串[],因为C#可以自动推断类型(在这种情况下是字符串)。请参阅https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewitem(v=vs.110).aspx – Tom

24

我没有看到有人正确回答这个问题。所以我在这里发布。为了让列显示出来,你需要指定下面一行。

lvRegAnimals.View = View.Details; 

然后再添加你的列。

lvRegAnimals.Columns.Add("Id", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 

希望这有助于任何人在未来寻找答案。

+3

这应该是正确的答案 – lzt

3

您需要为控件设置属性:

listView1.View = View.Details; 
+0

这个属性做什么>/ –

+0

*这个属性做了什么* - ListViews在标准的“Windows资源管理器”中使用,所以想象**详细信息视图**在标准文件夹/文件浏览器。 –

+0

它会显示网格结构。 PLS。自己尝试一下。 –

0
  listView1.View = View.Details; 
     listView1.Columns.Add("Target No.", 83, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Range ", 100, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Azimuth ", 100, HorizontalAlignment.Center);  

我也有同样的问题..我拖动列到左..但现在确定..所以我们说,我有283 * 196 listview的大小.....我们在列宽-2中声明了自动宽度。为了适合listview,我们可以将listview的宽度分成3部分(83,100,100)...

+0

不要只是发布代码,你需要添加一个解释。 – reformed