C#编程学习(07):自动监测大写键是否被锁定

一、需求说明:在使用笔记本电脑执行一些操作时,可能会频繁用到大小写键切换;本示例主要采用标签和无边框窗体演示,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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值