C# keydown 与keyup的问题
我在做一个指法练习软件运用了控件数组来实现敲击键盘字母来实现对应button变色,在使用组合键Shift+字母时候,keydown中的shift变色实现了,keyup中的...
我在做一个指法练习软件运用了控件数组来实现敲击键盘字母来实现对应button变色,在使用组合键Shift+字母 时候,keydown中的shift变色实现了,keyup中的还原却未实现,颜色依然是keydown中改变的红色,这是为什么?
还有我想在按下键是改变成红色,松开是变回系统默认的那个偏灰色的该怎么做?
代码:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (s1.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s1, e.KeyCode.ToString())].BackColor = Color.Red;
}
if(s2.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s2, e.KeyCode.ToString())].BackColor = Color.Red;
}
if (e.KeyData == (Keys.ShiftKey | Keys.Shift))
{
btn[4].BackColor = Color.Red;
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (s1.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s1, e.KeyCode.ToString())].BackColor = Color.Gray;
}
if (s2.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s2, e.KeyCode.ToString())].BackColor = Color.Gray;
}
if (e.KeyData == (Keys.ShiftKey | Keys.Shift))
{
btn[4].BackColor = Color.Gray;
}
}
总感觉有点效率底下但是新手真不知道咋弄了 展开
还有我想在按下键是改变成红色,松开是变回系统默认的那个偏灰色的该怎么做?
代码:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (s1.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s1, e.KeyCode.ToString())].BackColor = Color.Red;
}
if(s2.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s2, e.KeyCode.ToString())].BackColor = Color.Red;
}
if (e.KeyData == (Keys.ShiftKey | Keys.Shift))
{
btn[4].BackColor = Color.Red;
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (s1.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s1, e.KeyCode.ToString())].BackColor = Color.Gray;
}
if (s2.Contains(e.KeyCode.ToString()))
{
btn[Array.IndexOf(s2, e.KeyCode.ToString())].BackColor = Color.Gray;
}
if (e.KeyData == (Keys.ShiftKey | Keys.Shift))
{
btn[4].BackColor = Color.Gray;
}
}
总感觉有点效率底下但是新手真不知道咋弄了 展开
1个回答
展开全部
因为如果用了组合键, KeyUp 弹起时 KeyCode 并不是 Shift 而是组合键中的另一个键。
比如,Shift + A,捕捉顺序是:
1、KeyDown:KeyCode = Shift,Shift = false,Ctrl = false, Alt = false;
2、KeyDown:KeyCode = A,Shift = true,Ctrl = false, Alt = false;
3、KeyUp:KeyCode = A,Shift = true,Ctrl = false, Alt = false;
比如,Shift + A,捕捉顺序是:
1、KeyDown:KeyCode = Shift,Shift = false,Ctrl = false, Alt = false;
2、KeyDown:KeyCode = A,Shift = true,Ctrl = false, Alt = false;
3、KeyUp:KeyCode = A,Shift = true,Ctrl = false, Alt = false;
追问
但是我写的这样单按shift键keyup也没有实现。您的意思是不能用keycode么?那该用什么呢
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机,单片微型计算机。它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/O)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询