c# keydown事件问题

privatevoidtextBox1_KeyDown(objectsender,KeyEventArgse){if(e.KeyCode==Keys.Space){tex... private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{ textBox1.Text = "Space"; }
}
textbox1里面按下空格键后显示的是“一个空格和一个Space”,可我想只显示Space怎么写?
展开
 我来答
mrsanny
推荐于2017-09-13 · 超过23用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:33.5万
展开全部
经过自己的实验和度娘结合,e.handled=true,在KeyPress事件中却可以屏蔽掉“空格”这个键盘输入,在KeyDown中却屏蔽不了,所以你会出现一个控制加一个space的情况。

同样如果你想屏蔽诸如F1,F2这样的功能控制键,则用KeyPress事件则不起作用了,而需要在KeyDown事件中处理,所以这里可以得到一个结论:
1.如果想处理a,b,c,d这样的字符键,则需要用KeyPress事件来处理屏蔽问题。
2.如果想处理F1,F2,F3,F4这样的功能控制键,则需要用KeyDown事件来处理屏蔽问题。

由此可知,space这个键只是普通的字母键,应该由KeyPress处理。如果想屏蔽一切的空格处理。可以重载ProcessCmdKey这个方法。下面的代码是百度来的,实验效果确实可以屏蔽空格的输入,意思是直接不处理。如果修改返回值为false,就是keydown或者keypress里面自己处理。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg == 0x0100 && keyData == Keys.Space)
{ //0x0100即WM_KEYDOWN常数
return true;//按空格键不作处理
}
return base.ProcessCmdKey(ref msg, keyData);
}
追问
关键是我程序的keydown事件里已经写了很多代码了,而且我程序还有N多个keydown事件,要写在keypress事件里我得做大量的修改还不一定能成功keypress里,所以我才问keydown里怎么写
追答
你可以在keypress里面屏蔽空格,keydown事件可以判断有没有空格就行。
百度网友2fb2783
2012-11-01 · TA获得超过207个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:120万
展开全部
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar== 32)
{
e.Handled = true;
textBox2.Text += "Space";
}
}
根据你的条件,屏蔽空格
追问
不行啊,我在keydown事件里写的
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
{
e.Handled = true;
textBox1.Text += "Space";
}
}
还是显示一个空格和一个space啊!!!

在keypress事件里我没试,因为我就想在keydown事件写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式