如何以编程方式选择ListView中的项目?

Hom*_*mam 61 .net c# listview selection winforms

我试图以编程方式选择ListView中的第一个项目,但它似乎没有被选中.我使用以下代码:

if (listView1.Items.Count > 0)
    listView1.Items[0].Selected = true;
Run Code Online (Sandbox Code Playgroud)

其实我之前遇到过这个问题,但我不记得我是怎么解决它的!

Cod*_*ray 83

最有可能的是,该项目正在被选中,您无法分辨,因为不同的控件具有焦点.根据应用程序的设计,有几种不同的方法可以解决这个问题.

  1. 简单的解决方案是在ListView显示表单时将焦点设置为第一个.用户通常通过单击将焦点设置为控件.但是,您还可以指定哪些控件以编程方式获得焦点.一种方法是将控件的选项卡索引设置为0(最低值表示将具有初始焦点的控件).第二种可能性是在表单的Load事件中使用以下代码行,或者在设置Selected属性后立即使用:

    myListView.Select();
    
    Run Code Online (Sandbox Code Playgroud)

    此解决方案的问题在于,当用户将焦点设置为表单上的其他控件(例如文本框或按钮)时,所选项目将不再突出显示.

  2. 要解决此问题,您需要将控件的HideSelection属性设置ListView为False.这将导致所选项目保持突出显示,即使控件失去焦点.

    当控件具有焦点时,所选项目的背景将使用系统高亮颜色绘制.当控制并没有具有焦点,所选项目的背景将用于灰色(或禁用)文本系统颜色画.

    您可以在设计时或通过代码设置此属性:

    myListView.HideSelection = false;
    
    Run Code Online (Sandbox Code Playgroud)


Vik*_*iaR 34

if (listView1.Items.Count > 0)
{
    listView1.Items[0].Selected = true;
    listView1.Select();
}
Run Code Online (Sandbox Code Playgroud)

除非控件具有焦点(或将HideSelection属性设置为false),否则列表项不会显示为选中状态

  • 不,这不是不言自明的.唯一有意义的方法是,如果你理解列表项没有被选中,除非控件具有焦点(或者你将`HideSelection`属性设置为false).如果你知道这一点,你首先不必问这个问题.更重要的是,当用户点击表单上的其他位置时,这会中断.突然,所选项目似乎不再被选中!只是从你的答案中复制并粘贴代码的提问者将不知道发生了什么,他们将回来问另一个问题. (10认同)
  • 但它回答了问题并且它是自我解释的:-) (6认同)
  • 没有解释的代码片段不算作答案. (3认同)
  • 好的,同意 - 你的答案更全面,更适合问题。 (2认同)

Jon*_*ood 11

我知道这是一个老问题,但我认为这是确定的答案。

listViewRamos.Items[i].Focused = true;
listViewRamos.Items[i].Selected = true;
listViewRemos.Items[i].EnsureVisible();
Run Code Online (Sandbox Code Playgroud)

如果有可能控件没有焦点,但您想将焦点强制给控件,则可以添加以下行。

listViewRamos.Select();
Run Code Online (Sandbox Code Playgroud)

为什么 Microsoft 不只是添加一种SelectItem()方法来为您完成所有这一切,这超出了我的理解。


bit*_*ler 8

我认为问题和解决方案是由cody grey描述的!我还有一个补充说明.

请检查指定列表视图项目(和控件!)的焦点.我可以使用以下代码行设置焦点和选择:

this.listView1.Items[1].Selected = true;
this.listView1.Items[1].Focused = true;
Run Code Online (Sandbox Code Playgroud)

但重点控制是一个条件!