各位大侠,小弟想写个俄罗斯方块,有两个地方不是很明白:
1.在一个Form里添加两个panel和几个button,再为Form添加KeyDown事件的处理方法,但是在运行后当按键时貌似没有执行方法,而是在几个button之间进行切换,按下的键是键盘的上下左右键(用来控制移动方向和变形),这是为什么?
2.还有,如果为两个panel添加Paint事件的处理方法,那是在什么时候执行?对Paint时间不是很理解,希望大家能多介绍一下~~
1.在一个Form里添加两个panel和几个button,再为Form添加KeyDown事件的处理方法,但是在运行后当按键时貌似没有执行方法,而是在几个button之间进行切换,按下的键是键盘的上下左右键(用来控制移动方向和变形),这是为什么?
2.还有,如果为两个panel添加Paint事件的处理方法,那是在什么时候执行?对Paint时间不是很理解,希望大家能多介绍一下~~
解决方案 »
- 用类似于SQL来查找C#里的DataTable
- C#模拟鼠标点击事件
- C#向指定窗口发消息
- 'c:\..\System.Dal.dll' 和'c:\..\System.Data.SqlClient.dll' 兩者中都有型別 'System.Data.SqlClient.SqlConnection'
- (急)我用TcpServer和TcpClient写了一个服务器端和一个客户端,请问为什么不能在单机上连接呢?
- 请问 C# 动态调用 DLL 的方法。
- 新手问题!路过的帮看看!
- 关于套接字的问题
- 分布式开发中,C#如何实现C/S间的Callback?
- 向LISTBOX添加A项,如果判断LISTBOX里是否已有A项,有的话取消添加!
- 公安系统内网的高原邮局谁接触过?要用ajax做自动发邮件的模块
- 关于TopMost窗口的难题
建议将按钮的tabstop设置为false。
// 在派生类中重写 ProcessCmdKey 方法时,控件应返回 true 以指示它已处理该键。
// 对于未由该控件处理的键,应返回调用基类的 ProcessCmdKey 方法的结果。using System.Windows.Forms;class Test : Form
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Apps : // 应用程序键
case Keys.RWin : // 右 Win 键
case Keys.Menu | Keys.Alt : // Alt 键
case Keys.F4 | Keys.Shift : // Shift-F4 键
MessageBox.Show("Key Press : " + keyData);
return true;
}
return base.ProcessCmdKey (ref msg, keyData);
} static void Main()
{
Application.Run(new Test());
}
}
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
string s = string.Empty;
switch ((int)msg.LParam)
{
case 0x20380001 : s = "LAlt" ; break;
case 0x21380001 : s = "RAlt" ; break;
case 0x001d0001 : s = "LControl"; break;
case 0x011d0001 : s = "RControl"; break;
case 0x002a0001 : s = "LShift" ; break;
case 0x00360001 : s = "RShift" ; break;
case 0x001c0001 : s = "Enter" ; break;
case 0x011c0001 : s = "PadEnter"; break;
}
MessageBox.Show(msg + "\r\n" + keyData + "\r\n" + s);
return base.ProcessCmdKey(ref msg, keyData);
} static void Main()
{
Application.Run(new Test());
}
}
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Up : // 上
case Keys.Down : // 下
case Keys.Left : // 左
case Keys.Right: // 右
MessageBox.Show("您按下了 : " + keyData);
return true;
}
return base.ProcessCmdKey (ref msg, keyData);
} static void Main()
{
Application.Run(new Test());
}
}
那么就这样吧protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Up: // 上
case Keys.Down: // 下
case Keys.Left: // 左
case Keys.Right: // 右
frm_KeyDown(this, new KeyEventArgs(keyData));
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}