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

我正在尝试以编程方式选择 ListView 中的第一项,但它似乎没有被选中。我使用以下代码:

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

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

186893 次浏览
if (listView1.Items.Count > 0)
{
listView1.Items[0].Selected = true;
listView1.Select();
}

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

最有可能的是,项目 被选中,你只是不能告诉,因为不同的控件有焦点。根据应用程序的设计,有几种不同的方法可以解决这个问题。

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

    myListView.Select();
    

    此解决方案的问题在于,当用户将焦点设置到窗体上的另一个控件(如文本框或按钮)时,所选项将不再显示突出显示。

  2. 要解决这个问题,需要将 ListView控件的 HideSelection财产设置为 False。即使控件失去焦点,它也会导致选定的项转到 仍然突出显示

    当控制 已经的焦点,选定的项目的背景将绘制与系统突出显示颜色。当控件 没有拥有焦点时,所选项目的背景将被绘制成用于灰色(或禁用)文本的系统颜色。

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

    myListView.HideSelection = false;
    

我认为问题和解决方案是由科迪灰色描述的! 我有一个额外的说明。

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

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

但是集中控制是一个条件!

if (listView1.Items.Count > 0)
{
listView1.FocusedItem = listView1.Items[0];
listView1.Items[0].Selected = true;
listView1.Select();
}
        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
ListViewItem.IsSelected = true;
ListViewItem.Focus();

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

listViewRamos.Items[i].Focused = true;
listViewRamos.Items[i].Selected = true;
listViewRemos.Items[i].EnsureVisible();

如果该控件有可能没有焦点,但是您希望将焦点强制到该控件,则可以添加以下行。

listViewRamos.Select();

为什么微软不仅仅添加一个 SelectItem()方法来为你做所有这些,这是我无法理解的。