如何以编程方式选择 ListView 中的项目?
Posted
技术标签:
【中文标题】如何以编程方式选择 ListView 中的项目?【英文标题】:How to select an item in a ListView programmatically? 【发布时间】:2011-08-13 01:41:46 【问题描述】:我正在尝试以编程方式选择 ListView 中的第一项,但它似乎没有被选中。我正在使用以下代码:
if (listView1.Items.Count > 0)
listView1.Items[0].Selected = true;
其实我以前也遇到过这个问题,但是我不记得我是怎么解决的了!
【问题讨论】:
【参考方案1】:if (listView1.Items.Count > 0)
listView1.Items[0].Selected = true;
listView1.Select();
除非控件具有焦点(或者您将HideSelection
属性设置为false),否则列表项不会显示为选中状态
【讨论】:
没有解释的代码 sn-ps 不算作答案。 但它回答了问题并且不言自明:-) 不,这不是不言自明的。唯一有意义的方法是,如果您了解列表项不会显示为选中,除非控件具有焦点(或者您将HideSelection
属性设置为 false)。如果你知道这一点,你一开始就不必问这个问题。更重要的是,当用户单击表单上的其他位置时,这会中断。突然,所选项目似乎不再被选中!只是从您的答案中复制和粘贴代码的提问者不会知道发生了什么,他们会回来问另一个问题。
好的,同意 - 您的回答更全面,更适合问题。
如果该元素不可见,您必须添加UsersLst.Items[index].EnsureVisible();
才能显示该元素。【参考方案2】:
最有可能的是,项目 被选中,您只是无法判断,因为不同的控件具有焦点。有几种不同的方法可以解决这个问题,具体取决于应用程序的设计。
简单的解决方案是在显示表单时首先将焦点设置到ListView
。用户通常通过单击控件来设置焦点。但是,您也可以指定哪些控件以编程方式获得焦点。一种方法是将控件的选项卡索引设置为 0(最小值表示将具有初始焦点的控件)。第二种可能性是在表单的 Load
事件中使用以下代码行,或者在设置 Selected
属性后立即使用:
myListView.Select();
此解决方案的问题在于,当用户将焦点设置到表单上的其他控件(例如文本框或按钮)时,所选项目将不再突出显示。
要解决此问题,您需要将ListView
控件的HideSelection
property 设置为False。这将导致所选项目保持突出显示,即使控件失去焦点。
当控件拥有焦点时,被选中项的背景将被涂上系统高亮颜色。当控件没有获得焦点时,所选项目的背景将被绘制为用于灰色(或禁用)文本的系统颜色。
您可以在设计时或通过代码设置此属性:
myListView.HideSelection = false;
【讨论】:
【参考方案3】:我认为问题和解决方案是由 cody gray 描述的!我还有一条注释。
请检查指定列表视图项(和控件!)的焦点。我可以使用以下代码行设置焦点和选择:
this.listView1.Items[1].Selected = true;
this.listView1.Items[1].Focused = true;
但是集中控制是一个条件!
【讨论】:
仅当您选择了 多个 项时,才需要将焦点设置到单个列表视图项。在这种情况下,所有选定项目的背景都将突出显示,但其中只有一个具有虚线“焦点矩形”。您可以通过设置Focused
property 来确定是哪一个,就像您在此处所做的那样。当只选择ListView
中的一项时,只要其宿主控件获得焦点,它就会始终获得焦点。【参考方案4】:
if (listView1.Items.Count > 0)
listView1.FocusedItem = listView1.Items[0];
listView1.Items[0].Selected = true;
listView1.Select();
【讨论】:
【参考方案5】: 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
【讨论】:
同意,EnsureVisible()
同样重要。【参考方案6】:
ListViewItem.IsSelected = true;
ListViewItem.Focus();
【讨论】:
【参考方案7】:我知道这是一个老问题,但我认为这是明确的答案。
listViewRamos.Items[i].Focused = true;
listViewRamos.Items[i].Selected = true;
listViewRemos.Items[i].EnsureVisible();
如果控件有可能没有焦点,但您想将焦点强制到控件,则可以添加以下行。
listViewRamos.Select();
为什么微软不只是添加一个 SelectItem()
方法来为你完成这一切,我无法理解。
【讨论】:
这是我正在寻找的解决方案。其他解决方案对我不起作用。 选中的Item
是什么类型的?是ListViewItem
吗?如果是,我无法使用.
获取属性或方法。以上是关于如何以编程方式选择 ListView 中的项目?的主要内容,如果未能解决你的问题,请参考以下文章
ListView:如何从外部以编程方式访问 Item 的元素?