ListView仅在取消选择所有内容后调用SelectedIndexChanged

时间:2014-06-30 01:43:31

标签: c# listview methods

ListViews为未选中的每个项目和所选的每个项目调用一次SelectedIndexChanged。我需要在这些条件下调用函数:

  • 选择单个项目时,只有一次,即使之前选择了多个或其他内容。
  • 一旦选择了多个项目,但只有在鼠标松开后才会显示。
  • 一切都未被选中后。

(换句话说,在仍以某种方式处理每个所选项目时,呼叫量最少)

    bool holdMouse = false;
    bool clicked = false;
    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (MouseButtons == MouseButtons.Left)
        {
            holdMouse = true;
        }
        else if(clicked)
        {
            clicked = false;
            func();
        }

    }

    private void listView1_MouseUp(object sender, MouseEventArgs e)
    {
        if (holdMouse)
        {
            holdMouse = false;
            func();
        }
    }

    private void listView1_MouseDown(object sender, MouseEventArgs e)
    {
        clicked = true;
    }

    private void func() { }

当我取消选择取消选择所有内容之前,我取消选择一次调用该函数的多个内容时,我需要除了之外的所有内容。它在取消选择第一个东西后调用它。

" holdMouse"用于阻止用户拖动选择时发生任何事情。和"点击"用于确保在取消选择多个内容时仅调用该函数一次。如果没有,则为每个取消选择的项目调用它。

我也尝试过这里的最佳答案: Catching Unselecting All in ListView -- SelectedIndexChanged Firing Twice 但是,只有在选择项目时才调用该函数,而不是在取消选择项目时调用该函数。我仍然遇到一个问题,我需要在之后调用我的函数>取消选择所有内容。

1 个答案:

答案 0 :(得分:0)

好的,这非常令人尴尬。我只是让它变得太复杂了。这非常有效。

    Boolean selChanged = false;

    private void func()
    {
        if (selChanged)
        {
            selChanged = false;
            //do stuff here
        }
    }

    private void listView1_MouseUp(object sender, MouseEventArgs e)
    {
        func();
    }

    private void listView1_KeyUp(object sender, KeyEventArgs e)
    {
        func();
    }

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        selChanged = true;
    }