代码之家  ›  专栏  ›  技术社区  ›  James

是否以编程方式触发ListView.SelectedIndexChanged事件?

  •  4
  • James  · 技术社区  · 17 年前

    如何以编程方式激发ListView的SelectedIndexChanged事件?

    我希望ListView中的第一个项目在用户完成某个操作后自动变为选中状态。SelectedIndexChanged事件中已存在代码以突出显示所选项目。不仅项目无法高亮显示,而且SelectedIndexChanged中设置的断点也不会命中。此外,Debug.WriteLine无法生成输出,所以我很确定事件没有触发。

    listView.Items[0].Selected = false;
    listView.Items[0].Selected = true;
    listView.Select();
    Application.DoEvents();
    

    包含额外的.Select()方法调用是为了更好地度量取消选择(.Selected=false)用于取消选择.Items集合中的ListViewItem,以防它在默认情况下被选中,因此将其设置为“true”将无效。“Application.DoEvents()”调用是另一种最后的方法。

    我应该提到,当通过键盘或鼠标输入选择某个项目时,SelectedIndexChanged事件会正确启动。

    3 回复  |  直到 17 年前
        1
  •  2
  •   Andrew Hare    17 年前

    为什么不能将当前在事件处理程序方法中的代码移动到一个既可以从原始位置调用,也可以从代码调用的方法中?

    class Foo
    {
        void bar(Object o, EventArgs e)
        {
            // imagine this is something important
            int x = 2;
        }
    
        void baz()
        {
            // you want to call bar() here ideally
        }
    }
    

    将被重构为:

    class Foo
    {
        void bar(Object o, EventArgs e)
        {
            bop();
        }
    
        void baz()
        {
            bop();
        }
    
        void bop()
        {
            // imagine this is something important
            int x = 2;
        }
    }
    
        2
  •  2
  •   Matt Brunell    17 年前

    如果您创建一个派生自 ListView ,您可以调用受保护的方法 OnSelectedIndexChanged SelectedIndexChanged 事件

        3
  •  2
  •   Joshua Belden    17 年前

    通过将其设置为false来取消选择它不会触发事件,但将其设置为true将触发事件。

        public Form1 ()
        {
            InitializeComponent();
            listView1.Items[0].Selected = false; // Doesn't fire
            listView1.Items[0].Selected = true; // Does fire.
        }
    
        private void listView1_SelectedIndexChanged (object sender, EventArgs e)
        {
            // code to run
        }
    

    推荐文章