组合框回车问题

自由建客 2011-08-03 11:27:52
窗体设有 AcceptButton ,无论组合框下拉列表是否展开,回车均触发 AcceptButton.Click 。
我希望在组合框下拉列表展开时,回车只作选定而收起下拉列表,并不触发 AcceptButton.Click 。
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由建客 2011-08-04
  • 打赏
  • 举报
回复
        public class ComboBoxEx: ComboBox {
protected bool DroppedDownBak = false;
protected override bool IsInputKey(Keys keyData)
{
if (DroppedDown || DroppedDownBak) {
if (DroppedDownBak) DroppedDownBak = false;
if (DroppedDown) DroppedDownBak = true;
switch (keyData) {
case Keys.Return: return true;
case Keys.Escape: return true;
}
}
return base.IsInputKey(keyData);
}
}

目前这样用着,能实现目的,但为此多了一层类层次。
自由建客 2011-08-04
  • 打赏
  • 举报
回复
文档载 ComboBox.IsInputKey 方法如果 keyData 参数包含 Return 或 Escape 值,并且 DroppedDown 属性为 true,则 IsInputKey 方法返回 true。
按理说应当是楼上那样的情况,但我这奇怪的偏偏不是。
我这就是触发 AcceptButton.Click ,除非我不指定窗体的 AcceptButton 。


于是通过下面的代码我找到一点原因了,但不知更深层次原因,也就谈不上解决。
        public class ComboBoxEx: ComboBox {
protected override bool IsInputKey(Keys keyData)
{
if (DroppedDown)
switch (keyData) {
case Keys.Return: return true;
case Keys.Escape: return true;
}
return base.IsInputKey(keyData);
}
}

透过调试器可看到,当下拉列表未打开时, DroppedDown 为 false , IsInputKey() 执行一遍,行为预期。
当下拉列表打开时, IsInputKey() 奇怪地执行两遍,第一遍 DroppedDown 为 true ,第二遍 DroppedDown 为 false ,结果 IsInputKey() 形同虚设,依然触发 AcceptButton.Click 。
EdsionWang 2011-08-03
  • 打赏
  • 举报
回复
楼主,我刚刚试过了,如果组合框下拉列表展开时,回车只作选定而收起下拉列表,并没有触发 AcceptButton.Click 啊

难道我没明白你的意思~~
threenewbee 2011-08-03
  • 打赏
  • 举报
回复
那就不要给窗体设置AcceptButton
在Key_press里面判断,如果焦点不在Combo上,就触发某个按钮的Click达成AcceptButton的功能。

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧