【问题标题】:how to select index in a combobox using DOWN ARROW key?如何使用向下箭头键在组合框中选择索引?
【发布时间】:2021-06-22 03:33:30
【问题描述】:

I want this functionalitymy 组合框有多个值。例如:RJ11、RJ12、RJ13等。 AutoCompleteMode 设置为 append,AutoCompleteSource 设置为 listItems。我想要的只是当我在组合框中输入 rj 时,它会在组合框的文本字段中提示我 rj11,当我按下向下箭头键时,它应该选择 rj11,但它正在做的是继续搜索下一个可能的匹配项。

我试过了:

private void comboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if(e.KeyCode == Keys.Down)
        {
            comboBox1.SelectedIndex = comboBox1.FindStringExact(comboBox1.Text);
        }
    }

但它不起作用。 我对winform和编程很陌生。 请帮忙。 是的,对不起我的英语不好。

【问题讨论】:

  • 当您按下 Enter 键时,选择已完成。无需在 KeyDown 处理程序中设置任何内容。
  • @Jimi 如何将其设置为向下箭头键或我想要的任何其他键而不是 Enter ?
  • 在这种情况下,不确定为什么要覆盖人们习惯的默认行为。无论如何,如果您想在 ListControl 上的选择被移动时执行任何操作,您可以使用这个自定义控件:Raise an event when I hover the mouse over a ComboBox item。它是为 .Net FW 4.8 设计的(使用此版本的新功能),但随后进行了修改以与以前版本的框架兼容。它也应该在 .Net 5 中工作,但未经测试。
  • 您需要订阅公共ListItemSelectionChanged 事件才能在 ListControl 的元素被选中/突出显示时收到通知。

标签: visual-studio winforms combobox ado.net


【解决方案1】:

您可以尝试参考以下代码,通过向下键选择组合框中的索引。

我们可以覆盖表单中的 ProcessCmdkey 方法。

代码:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if ((this.ActiveControl == comboBox1) && (keyData == Keys.Down))
            {
                comboBox1.SelectedIndex = comboBox1.FindStringExact(comboBox1.Text);
                return true;
            }
            else
            {
                return base.ProcessCmdKey(ref msg, keyData);
            }
        }

【讨论】:

  • 非常感谢您抽出宝贵的时间,这就是我想要的,但有一个问题。现在当我按下向下箭头键时,我无法移动到下一个索引。我用 GIF 演示更新了我的问题。
  • @prashant,我在新问题中做出了新的回答。你可以看看。
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2014-04-16
相关资源
最近更新 更多