C# winform TextBox无法响应回车键

zhangjin1222 2012-03-09 02:31:54
如果把窗体的AcceptButton设置成登录btn的时候,btn按钮会多个边框,难看去不掉。于是换了个思路:监听窗体的按键信息。但是用户名TxtUserid做了只能匹配处理,就不能响应回车建,如果去掉智能匹配 就可以在窗体级别响应回车。怎么样让TextBox只能匹配又能在窗体级别响应回车。谢谢。
...全文
1795 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
彩虹 2014-07-01
  • 打赏
  • 举报
回复
Winform有一个AcceptButton属性,如果这个属性设为为某个按钮时,KeyPress或KeyDown截取Enter事件将无效
dave0615 2012-07-10
  • 打赏
  • 举报
回复
借鉴借鉴
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
本人公布下具体答案:
//这是KeyDown事件
private void Login_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
//这是KeyPress事件
private void Login_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
里面的事件e参数的类型是不同的。具体可以查下。
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
找到原因了 换成KeyDown事件就可以了。谢谢。
muyi66 2012-03-09
  • 打赏
  • 举报
回复
刚刚试了一下,字符串里包含汉字也没问题。只是汉字输入法档住了第一次回车。如果用粘贴的方式输入了汉字就完全是正确反应了。
muyi66 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zhangjin1222 的回复:]

我的程序运行的时候,用户名输入框处于焦点状态。不知道,你的设置了自动匹配,是不是在运行的时候也是处于焦点状态。谢谢你,muyi66
[/Quote]起初只有一个控件,始终处于焦点状态。没发现问题,包括下拉列表显示出来的情况下也能正确反应。

后来加了个按钮,我就测试了焦点分别处于文本框和按钮上的情况。结果还是一样,没有问题。

看来问题并不是出在这里,而是别的地方。你试试看简化那个字符串集里的内容——不用文件内容,而是直接在程序里给赋几个串。并且保证串里绝没有不可显示的字符(包括回车符)。

QQ没法用,TT看到就难看了 -_-
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
我的qq是 756839400 这上边不能贴图,可以加q聊。
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
我的程序运行的时候,用户名输入框处于焦点状态。不知道,你的设置了自动匹配,是不是在运行的时候也是处于焦点状态。谢谢你,muyi66
muyi66 2012-03-09
  • 打赏
  • 举报
回复
增加了一个按钮,然后把代码改成下面这样:
        private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
//MessageBox.Show("检测到回车");
button1_Click(sender,e);
}
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("按钮被点击");
}
结果是每次回车都能显示出"按钮被点击"
muyi66 2012-03-09
  • 打赏
  • 举报
回复
用的是VS2010,e的成员里没有KeyChar。
muyi66 2012-03-09
  • 打赏
  • 举报
回复
我测试发现没问题呢?

新开了一个Form,里面就只有一个TextBox,按你的形式设置了自动完成项目,不过没定义字符串集,直接从控件属性上输入了几个串作为列表。

        private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
MessageBox.Show("检测到回车");
}
然后运行,窗体检测不到回车。然后我把窗体的KeyPreview设为True,再运行每次都能检测到回车了,不管当时TextBox处于什么状态都没问题。
muyi66 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ziyouli 的回复:]

试试把textbox设置为multiline模式
[/Quote]这个时候不能设成多行。
ziyouli 2012-03-09
  • 打赏
  • 举报
回复
试试把textbox设置为multiline模式
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
关键是窗体和TxtUer接收不到回车键
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
我已经设置在窗体级别接收回车了,但是怎么又被截获了呢。
cloudtian101 2012-03-09
  • 打赏
  • 举报
回复
试试SendKeys 类
Castiel丶Luo 2012-03-09
  • 打赏
  • 举报
回复
有智能提示的时候第一次按回车是选择 第二次按也还是捕捉不到么
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
是智能匹配,就是可以记住历史登录记录,类似qq登录的那种。不输入密码,当输入用户名之后回车就可以自动填写密码登录。
Castiel丶Luo 2012-03-09
  • 打赏
  • 举报
回复
回车键事件被autocompele截获了吧
zhangjin1222 2012-03-09
  • 打赏
  • 举报
回复
这样处理窗体按键消息
//load的时候
this.KeyPreview = true;
//窗体消息
private void Login_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{

if (e.KeyChar == 13)//如果输入的是回车键
{
// SelectNextControl(this.ActiveControl, true, true, true, true);
this.btn_Login_Click(sender, e);//触发button事件
}
}
加载更多回复(3)

111,119

社区成员

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

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

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