2011-04-26 101 views
52

我試圖以編程方式選擇ListView中的第一個項目,但它似乎沒有被選中。我正在使用下面的代碼:如何以編程方式選擇ListView中的項目?

if (listView1.Items.Count > 0) 
    listView1.Items[0].Selected = true; 

其實我以前有過這個問題,但我不記得我是如何設法解決它的!

回答

68

最有可能的,該項目是被選中,你就不能說因爲不同的控制有重點。有幾種不同的方法可以解決這個問題,具體取決於應用程序的設計。

  1. 簡單的解決方案是首先將焦點設置爲ListView,無論何時顯示窗體。用戶通常通過點擊它們將焦點設置到控件上。但是,您也可以指定哪些控件以編程方式獲取焦點。這樣做的一種方法是將控件的選項卡索引設置爲0(最低值表示將具有初始焦點的控件)。第二種可能性是使用下面的代碼行放在窗體的Load事件,或之後立即設置Selected屬性:

    myListView.Select(); 
    

    這個解決方案的問題是,所選擇的項目將不再突出顯示當用戶將焦點設置爲表單上的其他控件(如文本框或按鈕)。

  2. 要解決該問題,您需要將ListView控件的HideSelection property設置爲False。這會導致選中的項目保持突出顯示,即使控件失去焦點。

    當控件具有焦點時,所選項目的背景將使用系統高亮顏色進行繪製。當控件確實有而不是有焦點時,所選項目的背景將被繪製爲用於灰色(或禁用)文本的系統顏色。

    您可以設置該屬性在設計時,或通過代碼:

    myListView.HideSelection = false; 
    
+1

+1,謝謝你的好評。 – Homam 2011-04-26 14:28:22

21
if (listView1.Items.Count > 0) 
{ 
    listView1.Items[0].Selected = true; 
    listView1.Select(); 
} 

列表項不出現選擇,除非控件具有焦點(或您的HideSelection屬性設置爲false)

+3

沒有解釋的代碼片段並不算作答案。 – 2011-04-26 13:53:15

+4

但它回答了問題,它是自我解釋:-) – VikciaR 2011-04-26 13:54:52

+7

不,它不是自我解釋。唯一有意義的方法是,如果你明白,除非控件具有焦點(或者將'HideSelection'屬性設置爲false),否則列表項不會顯示出來。如果你知道這一點,你首先不必問這個問題。更重要的是,當用戶點擊表單上的其他位置時,這會中斷。突然間,選定的項目不再顯示爲被選中!只是從你的答案中複製和粘貼代碼的提問者將不知道發生了什麼,他們會回過頭來問另一個問題。 – 2011-04-26 13:57:25

7

我認爲,問題和解決方案是由科迪灰色descripted!我還有一個附註。

請檢查指定listview項目(和控件!)的焦點。我可以用以下幾行代碼設置焦點和選擇:

this.listView1.Items[1].Selected = true; 
this.listView1.Items[1].Focused = true; 

但是,重點控制是一個條件!

+1

只有當您選擇了*多個*項目時,才需要將焦點設置爲單個列表視圖項目。在這種情況下,所有選中的項目的背景都將被突出顯示,但其中只有一個將具有虛線的「焦點矩形」。你可以通過設置['Focused'屬性](http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.focused.aspx)來確定哪一個是你所做的這裏。當只選擇ListView中的一個項目時,只要主控制器具有焦點,它就始終具有焦點。 – 2011-04-26 14:00:08

0
if (listView1.Items.Count > 0) 
{ 
    listView1.FocusedItem = listView1.Items[0]; 
    listView1.Items[0].Selected = true; 
    listView1.Select(); 
} 
2
 int i=99;//is what row you want to select and focus 
     listViewRamos.FocusedItem = listViewRamos.Items[0]; 
     listViewRamos.Items[i].Selected = true; 
     listViewRamos.Select(); 
     listViewRamos.EnsureVisible(i);//This is the trick 
+0

同意,'EnsureVisible()'同樣重要。 – 2017-08-11 14:00:22

-1
ListViewItem.IsSelected = true; 
ListViewItem.Focus(); 
相關問題