我遇到一种情况,我获得了一个 WinForms TextBox 实例,我想将自动完成功能附加到该实例。
我已经解决了自动完成(字符串匹配+下拉)的问题,并且到目前为止它工作可靠。
使用键盘导航下拉菜单的能力是什么(这是此类 UI 的标准)。
自然的解决方案是处理文本框的 KeyDown (或类似的)事件,并相应地移动下拉列表中的选择。
然而,要做到这一点,您需要覆盖IsInputKey()
事件以允许捕获箭头键事件。另一种方法是覆盖ProcessCmdKey()
并在那里处理事件。这两个的问题是我无法覆盖任何内容,因为我无法替换文本框实例。
Edit:假设我有以下代码:
void _textBox_KeyDown(object sender, KeyEventArgs e)
{
if (_dropdown.Visible)
{
// TODO The stuff below fails because we need to either handle ProcessCmdKey or override IsInputKey
switch (e.KeyCode)
{
case Keys.Tab:
{
// click selected item
_dropdown.Items[GetSelectedItemIndex()].PerformClick();
break;
}
case Keys.Down:
{
// select next (or first) item
int i = GetSelectedItemIndex() + 1;
if (i >= _dropdown.Items.Count) i = 0;
_dropdown.Items[i].Select();
break;
}
case Keys.Up:
{
// select previous (or last) item
int i = GetSelectedItemIndex() - 1;
if (i < 0) i = _dropdown.Items.Count - 1;
_dropdown.Items[i].Select();
break;
}
}
}
}
上面的代码的问题在于它是从未打电话过。该活动是从未触发箭头键。更多信息:上、下、左、右方向键不触发 KeyDown 事件 https://stackoverflow.com/questions/1646998/up-down-left-and-right-arrow-keys-do-not-trigger-keydown-event
我希望我没有误解你,但这是否是一个解决方案:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Down)
{
// Place logic for textbox here
}
}
我会在表单上使用 KeyDown 事件,然后将键码与 Keys.Down 键码进行比较
不工作
看这里:上、下、左、右方向键不触发 KeyDown 事件 https://stackoverflow.com/questions/1646998/up-down-left-and-right-arrow-keys-do-not-trigger-keydown-event
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)