【问题标题】:How to select an item in a ListView programmatically?如何以编程方式选择 ListView 中的项目?
【发布时间】:2011-08-13 01:41:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net winforms listview selection


    【解决方案1】:
    if (listView1.Items.Count > 0)
    {
        listView1.Items[0].Selected = true;
        listView1.Select();
    }
    

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

    【讨论】:

    • 没有解释的代码 sn-ps 不算作答案。
    • 但它回答了问题并且不言自明:-)
    • 不,这不是不言自明的。唯一有意义的方法是,如果您了解列表项不会显示为选中,除非控件具有焦点(或者您将 HideSelection 属性设置为 false)。如果你知道这一点,你一开始就不必问这个问题。更重要的是,当用户单击表单上的其他位置时,这会中断。突然,所选项目似乎不再被选中!只是从您的答案中复制和粘贴代码的提问者不会知道发生了什么,他们会回来问另一个问题。
    • 好的,同意 - 您的回答更全面,更适合问题。
    • 如果该元素不可见,您必须添加UsersLst.Items[index].EnsureVisible(); 才能显示该元素。
    【解决方案2】:

    最有可能的是,项目 被选中,您只是无法判断,因为不同的控件具有焦点。有几种不同的方法可以解决这个问题,具体取决于应用程序的设计。

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

      myListView.Select();
      

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

    2. 要解决此问题,您需要将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吗?如果是,我无法使用. 获取属性或方法。
          猜你喜欢
          • 2013-12-25
          • 1970-01-01
          • 1970-01-01
          • 2010-10-08
          • 2010-11-07
          • 1970-01-01
          • 2022-11-16
          • 2019-12-17
          • 1970-01-01
          相关资源
          最近更新 更多