2012-07-03 56 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