在ComboBox中输入密钥问题,并将AutoCompleteMode设置为Append

时间:2016-04-01 00:56:05

标签: c# .net winforms combobox windows-applications

按下 Enter 键,当foreach (var item in actionEvent.Colors.Cast<object>() .Concat(actionEvent.Links.Cast<object>()) .Concat(actionEvent.Texts.Cast<object>()) UpdateComponent(item.ComponentId, item); 的{​​{1}}设置为ComboBox时,下拉列表将会清除ComboBox的文字。

我们知道,当AutoCompleteMode中的Append属性设置为AutocompleteMode时,在widows表单中,我们会在输入项目的完整文本之前获取值。

问题出在这里:

  • 我点击下拉按钮并打开下拉列表
  • 我尝试输入一些字符,我按预期获得值并完成文本。
  • 但是当我按 Enter 时,它会删除组合框的文本。

如何选择ComboBox选项,并在下拉列表打开时按 Enter ,保留输入的文字,不要将其删除。

我在“自动完成模式”属性中尝试了“无”选项,但它没有正常工作,但没有数据附加....

我不需要建议并建议在“自动完成模式”属性中附加选项,因为它会打开另一个下拉窗口....

我需要在列出下拉框中的数据时键入数据,当我通过单击“输入”按钮获取附加值时它应该起作用(不会被删除)......

这可能吗?

由于

2 个答案:

答案 0 :(得分:3)

当下拉列表关闭时,它按预期工作,但当下拉列表打开时,按 Enter 将关闭下拉列表并删除输入的文本。

作为一种解决方案,您可以从ComboBox派生并以这种方式覆盖IsInputKey

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);
    }
}

答案 1 :(得分:0)

在vb.NET中,您必须在事件keydown中这样做:

  Private Sub ComboBox2_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox2.KeyDown
        If e.KeyCode = Keys.Enter Then TextBox7.Focus()
    End Sub