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()其实运行了,只是没有画出来,求解可能原因!! 展开
{
}
public void draw(){...}//画图
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
}
draw();放在Load事件里有反应,放到Keydown事件也却没反应,
所以在keydown里加了个textBox.Text+="0";测试,textBox有反应,但是draw还是没反应!
求解这是为什么!!
又回去试了一下,draw()其实运行了,只是没有画出来,求解可能原因!! 展开
3个回答
展开全部
经过自己的实验和度娘结合,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);
}
同样如果你想屏蔽诸如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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
窗体没有显示的画不出来,也就是要先show再画。
keydown里在draw之后有其他改动窗体位置大小之类导致窗体重绘动作的,自己画的会消失。
keydown里在draw之后有其他改动窗体位置大小之类导致窗体重绘动作的,自己画的会消失。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把窗体的属性
keypreview属性设置为True,然后在你的窗体那个类里面重写如下方法:
protected
override
void
OnKeyPress(KeyPressEventArgs
e)
{
if
(e.KeyCode
==
Keys.F1)
button1_Click(null,null);
}
备注:我没调试
keypreview属性设置为True,然后在你的窗体那个类里面重写如下方法:
protected
override
void
OnKeyPress(KeyPressEventArgs
e)
{
if
(e.KeyCode
==
Keys.F1)
button1_Click(null,null);
}
备注:我没调试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询