【问题标题】:MultiSelect ListBox Select And DeSelect EventMultiSelect ListBox 选择和取消选择事件
【发布时间】:2015-11-27 16:10:05
【问题描述】:

我在 winforms 应用程序中有一个列表框,现在业务逻辑要求我在列表框中的项目被选中时触发一个函数,如果列表框中的一个项目被取消选择则触发另一个函数。

但在我看来,VS 中列出的所有事件都没有赋予执行力。我确实看到了像

这样的事件
SelectedIndexChanged(object sender, EventArgs e)

SelectedValueChanged(object sender, EventArgs e)

但是如果列表框的选择发生变化,这两个事件都会触发。但它没有指定是否选择或取消选择了引发事件的项目。

对此的任何建议都会非常有帮助。

我什至在 MSDN 上找到了以下链接

https://msdn.microsoft.com/en-us/library/system.windows.controls.listboxitem.unselected%28v=vs.110%29.aspx

但我不确定如何在这种情况下应用相同的方法。

【问题讨论】:

  • 一种方法是维护所选项目的列表。每次触发这些事件时,请根据列表检查当前项目。如果它不存在,您将知道它刚刚被选中并可以将其添加到列表中,同样,如果它确实存在于列表中,您将知道它已被取消选择并可以将其删除。
  • 是的,我也想过类似的事情,我必须在我的表单类中记下全局变量中选定的项目计数并相应地采取行动。但这对于一个简单的要求来说会很乏味不是吗?
  • 您发布的链接适用于WPF,不适用于winforms
  • "但是对于一个简单的需求来说这会很乏味,不是吗?" - 对!我没有看到其他方法,除非有人已经编写了支持此功能的控件,您可以授权。

标签: c# winforms events listbox


【解决方案1】:

发布繁琐的解决方案。将来可能会帮助某些人复制粘贴。

public static int ListCount;

        private void listBoxPackService_SelectedIndexChanged(object sender, EventArgs e)
        {
            int CurrCount;

            ListBox.SelectedObjectCollection col = listBoxPackService.SelectedItems;
            CurrCount = col.Count;

            if (CurrCount > ListCount)
            {
                //Item Selected

            }
            else
            {
                //Item DeSelected

               if(CurrCount == 0)
               {
                  //All Items Were Deselected
               }

            }

            ListCount = CurrCount;

        }

加载列表框

ListCount = 0

根据您的要求重命名控件。

我仍然愿意寻求更好的解决方案:)

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多