【问题标题】:Detecting user selection in ComboBox.DropDownClosed in winforms在winforms中检测ComboBox.DropDownClosed中的用户选择
【发布时间】:2012-09-29 19:19:36
【问题描述】:

我在 UI 中有几个组合框,每个组合框都有一长串相似的条目(数字)。当用户从其中一个组合框中选择一个项目时,我知道用户会从其他组合框中选择一个具有相似值(但可能不相同)的条目。因此,在用户选择了一个值之后,为了帮助避免强迫用户进行大量滚动,我想将下一个组合框下拉菜单“预滚动”到最后一个选定值附近(当这个下拉菜单没有已经有一个选择)。

到目前为止,我已经通过使用实现了这一点

combobox.SelectedItem = myLastSelectedItem;

在组合框内。DropDown 事件处理程序。

然后,当下拉菜单关闭时,我需要能够检测用户是否点击了下拉菜单中的项目。如果用户没有单击某个项目,那么我必须将所选值重置为之前的值(无)。用户可能单击了 myLastSelectedItem 或其他项目(因此,我不能只将当前选定的项目与 myLastSelectedItem 进行比较,因为即使用户确实单击了它们也可能相同)。 SelectedValueChange、SelectedIndexChange、TextChanged 都在 DropDownClosed 事件之后被触发,因此我无法使用它们。 MouseClick 事件根本不会被触发。

因此,我如何检测到用户点击了组合框下拉菜单中的项目(而不是因为用户点击了下拉菜单或按下了转义键而导致下拉菜单关闭)?

【问题讨论】:

  • 你帮的太多了,什么都没做就已经这样了。
  • @HansPassant:对不起,我要么误解了你的评论,要么你误解了我的问题(不管怎样,这可能是我的错:))。哪一部分已经是什么方式了?

标签: .net winforms combobox click dropdownbox


【解决方案1】:

我尽我最大的努力看看我能不能完成这项工作,但如果我在 30 分钟后不拔掉头发,我会被诅咒的。如果您愿意进行一些更改,您可以尝试使用 ListBox 控件。它有一个“TopIndex”属性,可以滚动到您想要的索引,但实际上从不进行选择。见以下代码:

    private void listBox_SelectedIndexChanged(object sender, EventArgs e) {
        ListBox lbx = sender as ListBox;
        if (lbx != null) {
            switch (lbx.Name) {
                case "listBox1": 
                    listBox2.TopIndex = lbx.SelectedIndex; 
                    listBox2.SelectedIndex = -1; 
                    listBox3.TopIndex = 0; 
                    listBox4.TopIndex = 0; 
                    break;
                case "listBox2": 
                    listBox3.TopIndex = lbx.SelectedIndex; 
                    listBox3.SelectedIndex = -1;
                    listBox4.TopIndex = 0;
                    break;
                case "listBox3": 
                    listBox4.TopIndex = lbx.SelectedIndex; 
                    listBox4.SelectedIndex = -1; 
                    break;
            }
        }
    }

有 4 个不同的 ListBox 控件都在其 SelectedIndexChanged 事件中使用该控件。让我知道这是否有效。如果没有,我可以回到 ComboBoxes。

【讨论】:

  • 感谢您考虑这个问题!抱歉,列表框不起作用; UI 需要相当紧凑,因此需要下拉菜单。
  • 嗯,那好吧。我会在早上看看我能想出什么,希望一个新的开始会有所帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 2020-01-08
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多