一、需求说明:在使用笔记本电脑执行一些操作时,可能会频繁用到大小写键切换;本示例主要采用标签和无边框窗体演示,CapsLocks键的状态
二、练习知识点:
//第一,无边框窗体的鼠标拖动窗体移动问题
//第二,自动监听键盘大写键是否按下,并将其状态显示在窗体的Label控件上
//第三,添加右键关闭窗体
三、需求实现
3.1 界面说明
使用到的控件:Label用于显示键盘状态信息;ContextMenuStrip用于设计右键关闭应用程序
3.2 窗体基本设置
//用于设计无边框窗体
//用于设计窗体根据其控件内容调整其大小
//允许接收键盘上的按键信息
3.3给窗体添加Form1_KeyDown和Form1_KeyUp事件处理程序,监测大写键是否锁定
代码如下:
//监听键盘按键抬起,即大写键已锁定
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.CapsLock)
{
label1.Text = "当前键盘状态处于:大写锁定状态!";
}
}
//监听键盘按键抬起,即大写键锁定已解除
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (!Control.IsKeyLocked(Keys.CapsLock))
{
label1.Text = "当前键盘状态处于:小写锁定状态!";
}
}
3.4 为窗体添加右键菜单
(1)添加ContextMenuStrip控件,并将其与窗体的ContextMenuStrip属性绑定
(2)点击ContextMenuStrip控件(红1),在(红2)处的ToolStripMenuItem项设为“关闭”
(3)双击(红2),添加如下代码:
private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();//终止当前程序运行
}
3.5 鼠标拖动移动窗体位置
在FormBorderStyle属性设置为None时,鼠标拖动窗体位置无法移动;因此,需为窗体添加如下三个事件:
添加变量:
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
添加代码:
//监听鼠标左键按下后的点位坐标
private void Form1_MouseDown_1(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X;
yOffset = -e.Y;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}
//监听鼠标移动过程记录其状态变换时的坐标
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X, mouseOffset.Y);
Location = mousePos;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
3.5 结果演示
(1)大写键锁定解除
(2)大写键锁定
(3)右键关闭
4 总结
4.1 监听CapsLock键状态的三种方式
(1)自写函数监视
//声明部分
[DllImport("user32.dll", EntryPoint = "GetKeyboardState")]
public static extern int GetKeyboardState(byte[] pbKeyState); //自写函数监听键盘按键
//实现部分,如果按键索引码为14,则为大写键,返回为真
public static bool CapsLockStatus
{
get
{
byte[] bs = new byte[256];
GetKeyboardState(bs);
return (bs[0x14] == 1);
}
}
(2)使用事件的e参数:
e.KeyCode == Keys.CapsLock
(3)使用控件类Control
Control.IsKeyLocked(Keys.CapsLock)
4.2 Form窗体常用属性归纳
设置启动窗体 | 在Run函数中添加代码: Application.Run(new startFrom); |
设置图标 | Icon属性 |
隐藏标题栏 | FormBorderStyle |
启动位置 | StartPosition |
修改窗体大小 | Size |
设置窗体背景图片 | BackgroundImage |
窗体的显示与隐藏 | 创建对象,显示调用Show方法; 隐藏调用Hide方法 |
单击事件 | Click |
加载事件 | Load |
窗体关闭事件 | FromClosing e.Concel = False; //关闭窗体 |
背景设置与显示方式 | BackgroundImage/BackgroundImageLayout |
设置右键快捷方式 | ContextMenuStrip属性与对应空间绑定 |
监听键盘事件 | KeyPreview |
是否允许拖拽 | AllowDrop |
控件根据内容调整大小 | AutoSize |