C# Keydown事件问题

privatevoidForm1_Load(objectsender,EventArgse){}publicvoiddraw(){...}//画图privatevoidF... private void Form1_Load(object sender, EventArgs e)
{
}
public void draw(){...}//画图
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
}
draw();放在Load事件里有反应,放到Keydown事件也却没反应,
所以在keydown里加了个textBox.Text+="0";测试,textBox有反应,但是draw还是没反应!
求解这是为什么!!
又回去试了一下,draw()其实运行了,只是没有画出来,求解可能原因!!
展开
 我来答
力心远sz
2014-11-16 · TA获得超过168个赞
知道答主
回答量:182
采纳率:71%
帮助的人:128万
展开全部
经过自己的实验和度娘结合,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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cipherf
2014-11-16 · TA获得超过4.5万个赞
知道大有可为答主
回答量:2.3万
采纳率:67%
帮助的人:1.5亿
展开全部
窗体没有显示的画不出来,也就是要先show再画。
keydown里在draw之后有其他改动窗体位置大小之类导致窗体重绘动作的,自己画的会消失。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友243dca30f28
2020-06-29 · TA获得超过3919个赞
知道大有可为答主
回答量:3141
采纳率:29%
帮助的人:449万
展开全部
把窗体的属性
keypreview属性设置为True,然后在你的窗体那个类里面重写如下方法:
protected
override
void
OnKeyPress(KeyPressEventArgs
e)
{
if
(e.KeyCode
==
Keys.F1)
button1_Click(null,null);
}
备注:我没调试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式