2011-04-26 136 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(); 
相关问题