C# 在组合框中输入关键问题,并将“自动完成模式”设置为“附加”
当C# 在组合框中输入关键问题,并将“自动完成模式”设置为“附加”,c#,.net,winforms,combobox,windows-applications,C#,.net,Winforms,Combobox,Windows Applications,当组合框中的下拉菜单打开且自动完成模式设置为追加时,按Enter键清除组合框的文本 在widows表单中,我们知道当组合框中的自动完成模式属性设置为追加时,我们会在键入项目的完整文本之前获取值 问题在于: 我单击下拉按钮并打开下拉列表 我试着输入一些字符,得到预期的值,这样就完成了文本 但当我按Enter键时,它会删除组合框的文本 当下拉列表打开时,如何使用Append选项并按Enter键,保留输入的文本而不删除它 我在“自动完成模式”属性中尝试了“无”选项,它工作正常,但没有附加数据 我
组合框
中的下拉菜单打开且自动完成模式
设置为追加
时,按Enter键清除组合框
的文本
在widows表单中,我们知道当组合框
中的自动完成模式
属性设置为追加
时,我们会在键入项目的完整文本之前获取值
问题在于:
- 我单击下拉按钮并打开下拉列表
- 我试着输入一些字符,得到预期的值,这样就完成了文本
- 但当我按Enter键时,它会删除组合框的文本
Append
选项并按Enter键,保留输入的文本而不删除它
我在“自动完成模式”属性中尝试了“无”选项,它工作正常,但没有附加数据 我不需要“自动完成模式”属性中的建议和建议附加选项,因为它会打开另一个下拉窗口 我需要在下拉框中列出数据的同时键入数据,当我通过单击enter按钮获得附加值时,它应该可以工作(而不会被删除) 这可能吗
谢谢当下拉列表关闭时,它会按预期工作,但当下拉列表打开时,按Enter键将关闭下拉列表并删除输入的文本 作为一种解决方案,您可以从
组合框
派生并通过以下方式重写:
public class MyComboBox : ComboBox
{
protected override bool IsInputKey(Keys keyData)
{
switch ((keyData & (Keys.Alt | Keys.KeyCode)))
{
case Keys.Enter:
case Keys.Escape:
if (this.DroppedDown)
{
this.DroppedDown = false;
return false;
}
break;
}
return base.IsInputKey(keyData);
}
}
在vb.NET中,必须在事件
下键时执行此操作:
Private Sub ComboBox2_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox2.KeyDown
If e.KeyCode = Keys.Enter Then TextBox7.Focus()
End Sub
谢谢你的解决方案。。。我需要在哪里包括覆盖方法?我是否需要在单击下拉列表时创建任何事件并在那里尝试覆盖方法?你能帮助我理解这个解决方案吗?正如你在回答中看到的,你应该创建一个新类MyComboBox
,继承自ComboBox
,并使用它来代替ComboBox
。我已经在form.cs文件中创建了这个类。。。我有我以前的代码,我使用Combobox\u商品来显示100多条记录。。。。我如何用已经存在的商品箱继承这个类?很抱歉,我是winforms的新手,请在本教程中进行指导…将代码放在项目中的单独文件中。不要把它放在课堂上。然后打开form.designer.cs并将System.Windows.Forms.ComboBox
替换为MyComboBox
。。。你是救命恩人。。。。谢谢,它成功了。。。非常感谢你教我这么做。。。