【问题标题】:WinForms ComboBox detect if item was selected - even if item is the sameWinForms ComboBox 检测是否选择了项目 - 即使项目相同
【发布时间】:2020-01-22 11:11:31
【问题描述】:

这个问题类似于 What event handler to use for ComboBox Item Selected (Selected Item not necessarily changed) ,尽管使用的是 WinForms。

当用户在 ComboBox 中选择一个项目时,即使之前选择了该项目,我也想执行一些额外的代码。如果用户只是打开和关闭下拉菜单,我不希望代码运行。

SelectionChanged、ValueChanged 和 DropDownClosed 到目前为止都不起作用。 ValueChanged 是最好的,但不是 100% 我想要的。我想要一个 ValueSelected 事件。

【问题讨论】:

  • 解决方法:DropDownOpened > 清除选择 > DropDownClosed > 如果用户没有重新填写选择,则恢复选择
  • 是的。从来没有明确提到过,但用户很容易对此感到困惑。

标签: c# winforms events combobox


【解决方案1】:

WinForms 的 ComboBox 会在任何时候选择一个项目时引发 SelectedIndexChangedSelectionChangeCommitted 事件,不管它是否是同一个索引。
如果 DropDown 只是打开和关闭,则不会引发这些事件。

【讨论】:

  • 惭愧,但我搜索了一段时间后也这么认为。清除选择不是防止用户混淆的选项。继承是一种选择,但似乎有点矫枉过正。即便如此,我也需要看到我涵盖了所有情况 - 并且通常对自己的控件有不好的体验,这些控件应该在 100% 的情况下工作。
  • @AndreasReiff 我知道你的意思,组合框是在任何平台上正确实施的最棘手的控件之一。例如,我们的组合框的 JS 实现是网格组件大小的 10 倍,要涵盖的东西太多了。只是出于好奇,您的问题的实际用例是什么?只是客户的要求还是别的什么?
  • 组合框保存 sql 查询的参数,例如。 G。过滤公司 x,过滤区域 y。这些过滤器是可选的。该部分由启用/禁用查询中参数的每个组合框的复选框反映。如果用户可能希望他已经通过“摆弄”参数来启用该参数,我想自动设置检查。
  • @AndreasReiff 如果未选中相应的复选框,为什么不简单地禁用(并清除)组合框?这样,为了“摆弄”组合框,他们必须认真启用该字段过滤器。或者去掉复选框,让项目零成为 [无过滤] 项目。
  • 提供有意义的默认值。鉴于此处的示例,很难给出具体的内容,但是我们也使用 DateTimPickers,并且我们有默认值,例如周/月/季度的开始作为预设,即使该参数未启用,因为这是首选,如果有人实际上想过滤日期。顺便说一句,我们总是在复选框上付出了认真的努力,但现在我们第一次抱怨额外的点击并忘记了它(然后查询可能会以错误的参数运行一分钟9。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2012-06-05
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2016-10-31
相关资源
最近更新 更多