2

我试图检测用户何时在 ListView 中选择新项目以及何时取消选择所有内容(通过单击 ListView 上的空白区域),但我很难做到正确。我需要这个来启用或禁用几个“上移项目”和“下移项目”按钮。我认为最好的方法是处理ItemSelectionChanged事件,所以我有这个,这似乎很明显:

private void lstItems_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
    if (e.IsSelected) {
        cmbMoveUp.Enabled = true;
        cmbMoveDn.Enabled = true;
    } else {
        cmbMoveUp.Enabled = false;
        cmbMoveDn.Enabled = false;
    }
}

当用户取消选择所有内容时它可以正常工作,但问题是当用户选择另一个项目时会触发此事件两次:一次用于取消选择当前项目,另一次用于选择新项目。This causes some blinking on the "Move item up" and "Move item down" buttons, because it will first disable the buttons (because the current item was deselected) and then enable them again (when the new item is selected).

任何人都知道我该如何解决这个问题?我已经没有想法了。

提前致谢。

4

4 回答 4

0

您是否尝试过使用 lstItems_SelectedIndexChanged 而不是 lstItems_ItemSelectionChanged?我相信这只会触发这 1 次。希望有帮助!

于 2014-01-05T01:07:10.220 回答
0

我从未使用过 listView,但我认为您可以删除 lstItems_ItemSelectionChanged 方法的 else 部分,然后在 if 部分中您可以先禁用所有按钮,然后只启用两个相关按钮。lstItems_ItemSelectionChanged 事件触发两次,第一次“if”不触发,第二次“if”将触发。所以你的问题将得到解决。

于 2014-01-04T19:29:56.797 回答
0

我希望我的列表视图在取消选择列表时禁用两个按钮。下面的代码实现了这一点。

private void Session_List_SelectedIndexChanged(object sender, EventArgs e) {
    bool toggle = true;
    if (Session_List.SelectedItems.Count == 0) {
        toggle = false;
    }

    Selected_Task.Enabled = toggle;   
    Perform_Task.Enabled = toggle;
}
于 2019-10-18T06:02:15.360 回答
0

我发现的最佳解决方案是临时设置一个事件处理程序Application.Idle并从那里进行检查,如下所示:

bool handled;
private void lstItems_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
    if (!handled)
    {   handled = true;
        Application.Idle += SelectionChangeDone;   }
}

private void SelectionChangeDone(object sender, EventArgs e) {
    Application.Idle -= SelectionChangeDone;
    handled = false;

    if (lstItems.SelectedItems.Count > 0)
         cmbMoveUp.Enabled = cmbMoveDn.Enabled = true;
    else cmbMoveUp.Enabled = cmbMoveDn.Enabled = false;
}

无论您使用ItemSelectionChanged还是SelectedIndexChanged. 在这种情况下,两者都可以正常工作。

非常感谢 Grammarian 在这里回答了基本相同的问题:https ://stackoverflow.com/a/26393234/2532220

于 2017-02-04T09:31:33.220 回答