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

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

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


二、练习知识点:


//第一,无边框窗体的鼠标拖动窗体移动问题

//第二,自动监听键盘大写键是否按下,并将其状态显示在窗体的Label控件上

//第三,添加右键关闭窗体


三、需求实现


3.1 界面说明


2018122508541828.png


使用到的控件:Label用于显示键盘状态信息;ContextMenuStrip用于设计右键关闭应用程序


3.2 窗体基本设置


//用于设计无边框窗体


  //用于设计窗体根据其控件内容调整其大小    


//允许接收键盘上的按键信息


3.3给窗体添加Form1_KeyDown和Form1_KeyUp事件处理程序,监测大写键是否锁定


2018122508574613.png


代码如下:

 //监听键盘按键抬起,即大写键已锁定      
        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属性绑定

2018122509024677.png

(2)点击ContextMenuStrip控件(红1),在(红2)处的ToolStripMenuItem项设为“关闭”

20181225090448652.png


(3)双击(红2),添加如下代码:


        private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();//终止当前程序运行
        }

3.5 鼠标拖动移动窗体位置

在FormBorderStyle属性设置为None时,鼠标拖动窗体位置无法移动;因此,需为窗体添加如下三个事件:

20181225091441544.png

添加变量:

1. private Point mouseOffset; //记录鼠标指针的坐标 
2. 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)大写键锁定解除

2018122509240620.png

(2)大写键锁定

20181225092327316.png

(3)右键关闭

20181225092533352.png

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窗体常用属性归纳

image.png

image.png

相关文章
|
2月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
2月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
2月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
48 0
|
4天前
|
存储 C# 开发者
C# 编程基础:注释、变量、常量、数据类型和自定义类型
C# 编程基础:注释、变量、常量、数据类型和自定义类型
11 1
|
27天前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
2月前
|
C#
C#的类和对象的概念学习案例刨析
【5月更文挑战第17天】C#是一种面向对象的语言,以类和对象为核心。类作为对象的模板,定义了属性(如Name, Age)和行为(如Greet)。对象是类的实例,可设置属性值。封装通过访问修饰符隐藏实现细节,如Customer类的私有name字段通过Name属性访问。继承允许新类(如Employee)从现有类(Person)继承并扩展。多态让不同对象(如Circle, Square)共享相同接口(Shape),实现抽象方法Area,提供灵活的代码设计。
47 1
|
2月前
|
开发框架 .NET Java
探索 C#编程的奥秘与魅力
【4月更文挑战第20天】C#是微软开发的现代、面向对象的编程语言,以其简洁语法、强大功能和跨平台支持脱颖而出。它支持自动垃圾回收、泛型、委托、LINQ,并广泛应用于桌面、Web、移动和游戏开发。C#拥有活跃的开发者社区和丰富的资源,是Unity游戏开发的首选语言。随着.NET Core,C#可在多个操作系统上运行,持续创新,未来发展潜力巨大。
|
2月前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
2月前
|
人工智能 C# 云计算
C#编程的未来发展趋向
【4月更文挑战第21天】C#编程未来将深化跨平台支持,强化云计算与容器技术集成,如.NET Core、Docker。在AI和ML领域,C#将提供更丰富框架,与AI芯片集成。语言和工具将持续创新,优化异步编程,如Task、async和await,提升多核性能。开源生态的壮大将吸引更多开发者,共创更多机遇。
|
2月前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。