Winforms 如何更改组合框键盘输入行为

Winforms 如何更改组合框键盘输入行为,winforms,combobox,keyboard,Winforms,Combobox,Keyboard,(Visual Studio 2010、.NET 4、C#中的WinForms项目) 我有一个下拉列表风格的组合框,其中有一组固定的项目,这些项目是从1到40的整数,即。e、 ,组合框用于输入1到40之间的数字 现在,当用户使用键盘输入一个新值时,比如说“1”,控件的当前值是“2”,组合框首先跳到“10”,而我更希望它跳到“1”,并且只在第二次按键时跳到以“1”开头的第二个条目,即“10” 有没有简单的方法可以改变这种行为?我认为没有“简单的方法”。您需要构建一个自定义ComboBox类并进行覆

(Visual Studio 2010、.NET 4、C#中的WinForms项目)

我有一个下拉列表风格的组合框,其中有一组固定的项目,这些项目是从1到40的整数,即。e、 ,组合框用于输入1到40之间的数字

现在,当用户使用键盘输入一个新值时,比如说“1”,控件的当前值是“2”,组合框首先跳到“10”,而我更希望它跳到“1”,并且只在第二次按键时跳到以“1”开头的第二个条目,即“10”


有没有简单的方法可以改变这种行为?

我认为没有“简单的方法”。您需要构建一个自定义ComboBox类并进行覆盖。

ComboBox
从当前选定的项目开始执行增量搜索。键入10将引导您进入以“10”开头的条目,无论选择哪个条目

用前导零填充所有条目怎么样,这样用户就可以为第一个条目键入“01”


这也将确保条目被正确排序(如果您对列表项进行排序,并且它们应该包含数字字符后面的文本,这可能是早晚的情况。)。

ComboBox从当前选定的项开始执行增量搜索。键入10将引导您进入以“10”开头的条目,无论选择哪个条目。您想要的是禁用增量搜索功能。我一直在考虑在KeyDown处理程序中将selectedIndex设置为0,以使搜索从头开始,但这似乎不起作用。将其设置为-1,或将SelectedValue设置为Nothing。在KeyDown中重置它的问题会破坏增量搜索功能,因为您总是强制搜索从第一项开始(我相信,设置该项无论如何都会停止增量搜索)。