当前位置: 首页 > news >正文

7.5 窗体事件

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

Windows是基于事件驱动的操作系统,窗体、控件或组件都有不同的事件来实现人机交互,例如按下按钮,这个消息引发按钮的Click事件,然后我们就需要编程处理这个事件。

7.5.1 一个简单的窗体事件

新建一个窗体应用程序项目,在窗体编辑模式下,双击窗体,将转入默认的 Form1_Load (假设窗体名称没有改变,是默认的Form1)事件的代码编辑,键入以下代码:

【例 7.1【项目:code7-001】输出窗体相关信息。

        private void Form1_Load(object sender, EventArgs e)

        {

            this.Width = 400;

            this.Height = 300;

            Console.WriteLine("窗体位置:{0},{1}", this.Left, this.Top);

            Console.WriteLine("窗体大小:{0}*{1}", this.Width, this.Height);

            Console.WriteLine("客户区域:{0},{1},{2},{3}",

                    this.ClientRectangle.X, this.ClientRectangle.Y,

                    this.ClientRectangle.Width, this.ClientRectangle.Height);

        }

当窗体加载完成后,就会在输出窗口输出窗体位置、大小和客户区域位置大小:

图7-12 输出窗体相关信息

当程序启动的时候,默认创建了一个窗体的新实例,此时在代码中直接用Form1来表示当前窗体,那么就会有错误提示“不能通过其默认实例指代自身”,因此用this来代替了这个新实例。代码中甚至可以不使用this,直接输入 Width = 400,不过不建议这样。

简单对以上事件进行分析:

private void Form1_Load(object sender, EventArgs e)

private:表明这是一个私有的过程。

void:指明这是一个无返回值的过程。

Form1_Load:窗口载入时候引发事件的名称,可以自定义名称,例如修改为:

private void F_Load(object sender, EventArgs e)

如果修改了名称,需要同时找到Form1.Designer.cs中的代码:

this.Load += new System.EventHandler(this.Form1_Load)

修改为:

this.Load += new System.EventHandler(this.F_Load)

sender:引发事件的对象,在这里实际上就是Form1类,如果sender是在控件或组件的事件中,相应地就是指的该控件或组件。这里可以在代码中将sender显式转换为 Form1:Form1 f1 = (Form1)sender;

e:引发的事件。这里是EventArgs 类。

7.5.2 为窗体、控件或组件添加事件

双击窗体、控件或组件,就会转入默认的事件,例如窗体是Load事件,按钮是Click事件,文本框是TextChanged事件……,要使用其它的事件可以采用以下方法:

选中窗体、控件或组件,从右侧【属性】窗口,单击【事件】按钮(闪电图样的图标),找到需要创建的事件,双击即可创建并转入该事件的代码编写。

表7-3 窗体和控件常见的事件

事件

说明

Click

在窗体或控件上单击鼠标

DoubleClick

在窗体或控件上双击鼠标

MouseDown

在窗体或控件上按下鼠标(不释放)

MouseUp

在窗体或控件上按下的鼠标按键释放

MouseMove

鼠标在窗体或控件上移动

MouseHover

鼠标在窗体或控件上停留

KeyPress

在窗体或控件有焦点时按下键盘上的按键

除了以上事件,窗体、控件和组件还有自己独立的事件。

表7-4 窗体特有的事件:

事件

说明

Load

窗体载入时

FormClosing 

窗体关闭时

FormClosed 

窗体已经关闭

Closed          

同 FormClosed,已经过时,但仍能使用

Closing         

同FormClosing,已经过时,但仍能使用

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

相关文章:

  • [学成在线]07-视频转码
  • 链表-LeetCode
  • viewModelScope.launch(Dispatchers.IO)和withContext(Dispatchers.IO)
  • 如何用 Postman 发送 POST 请求?
  • 从入门到精通:SQL注入防御与攻防实战——红队如何突破,蓝队如何应对!
  • collections.Counter()介绍——快速统计元素出现的次数
  • python蓝桥杯刷题的重难点知识笔记
  • 如何处理不同输入类型(例如邮箱、电话号码)的验证?
  • 消息队列性能比拼: Kafka vs RabbitMQ
  • 26考研——栈、队列和数组_栈(3)
  • 26考研——树与二叉树_树、森林(5)
  • 学习爬虫的第二天——分页爬取并存入表中
  • AI Agent开发大全第十二课-向量数据库Qdrant使用全教程
  • 自然语言处理入门5——LSTM
  • VMware网络适配器
  • 查看进程文件描述符的限制
  • 什么是最优CUDA内核,GPU也分不同类型吗
  • 赛季7靶场 -- Code -- HTB writeup(Just hint)
  • 测试用例的场景化分析方法
  • 蓝桥杯高频考点——二分(含C++源码)
  • 定制基因编辑疗法治愈罕见遗传病患儿
  • 体坛联播|巴萨提前2轮西甲夺冠,郑钦文不敌高芙止步4强
  • 恒生银行回应裁员传闻:受影响的员工数目占银行核心业务员工总数约1%
  • 株洲一重病妇女被要求本人到银行取款时去世?当地警方:正在处理
  • 经常口干口渴的人,要当心这些病
  • 袁思达已任中国科学院办公厅主任