我正在尝试以编程方式选择 ListView 中的第一项,但它似乎没有被选中。我使用以下代码:
if (listView1.Items.Count > 0) listView1.Items[0].Selected = true;
其实我以前也遇到过这个问题,但是我不记得我是怎么解决的了!
if (listView1.Items.Count > 0) { listView1.Items[0].Selected = true; listView1.Select(); }
除非控件具有焦点(或者将 HideSelection属性设置为 false) ,否则列表项不显示为选中状态
HideSelection
最有可能的是,项目 是被选中,你只是不能告诉,因为不同的控件有焦点。根据应用程序的设计,有几种不同的方法可以解决这个问题。
简单的解决方案是每当显示窗体时首先将焦点设置为 ListView。用户通常通过单击控件来设置焦点。但是,您也可以指定哪些控件以编程方式获得焦点。一种方法是将控件的 tab 索引设置为0(最小值表示将具有初始焦点的控件)。第二种可能性是在表单的 Load事件中使用以下代码行,或者在设置 Selected属性后立即使用:
ListView
Load
Selected
myListView.Select();
此解决方案的问题在于,当用户将焦点设置到窗体上的另一个控件(如文本框或按钮)时,所选项将不再显示突出显示。
要解决这个问题,需要将 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()方法来为你做所有这些,这是我无法理解的。
SelectItem()