这是我在上一个项目中必须处理的一个问题,虽然我找到了一个有效的解决方案,但我对此并不满意,并且想知道是否会有更好,更清洁的问题。
基本上,我需要实现一个ComboBox,将一个项目(从下拉列表中选择)插入或附加到文本框而不是替换中的所有文本文本框:
事实证明,我无法通过处理ComboBox
的事件(例如SelectedIndexChanged
,SelectionChangeCommitted
,TextChanged
等)来实现此行为。)因为ComboBox
控件最终会将文本框字段与下拉列表中的所选项同步,而不会在之后引发任何其他事件。
我最终安装了一个Timer
,一旦过期,就会导致对文本框字段进行更新。计时器设置为约。 30毫秒,这应该足够长,以确保所有事件(SelectedIndexChanged
,TextUpdate
等)都已处理完毕,并且足够短,以至于不会感觉到用户明显滞后。
有谁知道这个问题更清洁的解决方案?
答案 0 :(得分:2)
我相信你已经知道这一点了,但我在这里重复一下,让你考虑一下这个含义。组合框是一种相对复杂的控件,由更简单的组件以预定义的方式交互组成。文本框,列表框和按钮组合在一起创建一个控件,旨在简化为简化文本输入和选择提供紧凑UI的常用方法。
看起来你的情况并不像组合框设计它们那样适合这些组件的预定义交互。因此,我的建议是分别创建文本框,列表框和按钮,并手动定义它们的交互方式,而不是试图对抗组合框的预定义行为。
答案 1 :(得分:1)
你想要的不是ComboBox。您需要一个文本框和一个按钮,单击该按钮可以为您提供可以插入文本框的标记下拉列表。 ComboBox 几乎为您提供了这个但不适合有两个原因:
您应该编写一个自定义控件来实现您需要的功能,并且具有更好地代表您正在执行的操作的UI。要寻找灵感,您可以考虑许多即时消息程序所具有的“插入表情符号”UI。请注意,该按钮通常不在文本框内,而是一个完全独立的按钮。