c# - ComboBox:如果操作员键入文本,然后按回车,则发生哪个事件
问题描述
我有一个包含一些有用项目的组合框。操作员可以从此列表中选择项目。我还想让操作员键入一些不在选择列表中的文本。
如果操作员指示他完成了对文本框的编辑,例如按回车键,我想检查操作员是否选择了一个项目,或者输入了一些新文本。
从获取所选项目或从组合框中输入文本的最佳方式中,我了解到我可以像这样读取文本框文本:
var operatorText = comboBox1.Txt;
但是我应该使用什么事件?
- 如果我输入一些文本并按 Enter,则不会引发 SelectedIndexChanged
- 操作员键入的每个字符都会引发 TextUpdate,但如果他按下回车键则不会
- 每次字符更改都会引发 TestUpdated,即使在选择之后也是如此,但如果按下 enter 则不会。
我在编辑文本框后按 Enter 时听到“叮”的一声,所以应该发生一些事件,但是是哪一个?
解决方案
吉米想出了正确的答案。订阅事件Control.KeyDown(不是KeyUp!),检查哪个键被按下,如果你认为操作员已经完成编辑,SuppressKeyPress,防止“叮”
private void OnParameterKeyDown(object sender, KeyEventArgs e)
{
ComboBox combo = (ComboBox)sender;
if (e.KeyCode == Keys.Return)
{
this.ProcessSelectedText(combo.Text);
e.SuppressKeyPress = true;
}
}
我选择不对 LostFocus 做出反应:如果操作员开始打字,但发现他犯了错误,他应该能够做其他事情,例如查找要键入的正确文本
另一种方法可能是,如果操作员按下回车键,您可以将键入的文本添加到项目列表中,以便选择项目。缺点:项目列表可能会变得很大,并且在列表中看到输入错误会很麻烦。
推荐阅读
- r - 根据 R 中的列值添加新行
- javascript - Postgres DatabaseError [SequelizeDatabaseError]:“IN”处或附近的语法错误
- c# - 如何将我的项目列表序列化为始终相同的 xml 字段名称,并将具有不同名称的 xml 列表反序列化为始终相同的类型?
- java - 在电子邮件附件中,任何类型的文档文件都使用文件扩展名而不是 coreect 扩展名发送
- vim - 是否可以在 vim 中使用 Control-p 和 Control-n 滚动多行自动完成?
- android - RecyclerView 在某个位置改变ImageView
- php - Express Checkout Paypal Payment Gateway For Woocommerce 存在 Polylang 问题
- java - ImageView 没有保持响应
- angular - 如何对组件进行单元测试以获取 ActivatedRoute paramMap 值并隐藏或显示 div
- android - Stripe 集成的这种解决方法是否正确