C#笔记——【面向对象基础】(五)Windows窗体与事件驱动

(一)WinForm开发环境的使用方法

1)软件部署的架构

  • B/S架构的应用程序【web应用程序】(浏览器Browser/ 服务器Server)

C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第1张图片

  • C/S 架构应用程序(Windows、WinForm、桌面应用程序):客户端/服务器(Client/ Server)

C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第2张图片

2)创建Windows应用程序

1. 在Visual Stuido中创建Windows应用程序的步骤:
  • 打开Visual Studio;
  • 新建项目;
  • 项目类型:Visual C# 项目;
  • 模板:Windows应用程序;
2. 不必选择.NET最高版本

开发的时候使用最高的,将来客户机也要安装最高版本;

【目录结构】注意:
  • 一般都有一个program.cs文件,这是应用程序的入口点;
  • 引用中是我们使用中的一些模块;添加引用才能添加命名空间;
  • Properties 中AssemblyInfo.cs是程序集信息;
  • Form.cs 与 Form.cs [设计] 之间的切换的快捷键是F7和Shift + F7;
3. 解决方案资源管理器

作用:显示整个醒目的文件组成;
C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第3张图片

注意【冒号的作用】:
  1. 表示继承;
  2. 实现接口;
partial关键字:

限定类本身的组成部分,当一个类加上这个关键字以后,各部分会整合成为一个类;

常用属性:

C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第4张图片

(二)事件驱动机制

出现错误,要先排查第一个;

1)事件的应用

计算机中的事件:
  • 鼠标按下、键盘按下;
事件的作用:
  • windows系统通过事件处理来响应用户的请求,在没有用户请求之前,事件处于静止等待状态;
事件的组成:
  • 提前设置好一个事件(.NET平台设计),然后根据需要添加一个事件处理程序(开发者自定义),最后将“事件本身”和“处理程序”连接起来(后台自动关联);
  • 当用户操作事件的时候(比如单击按钮、双击图标等),自动调用事件处理程序完成相应任务;

2)设置按钮的属性

  • 按钮的name实际上是一个ID,即这个是唯一的;
  • 增加一个事件,比如一个Click,可以在事件中找到,然后双击,出来事件的框架;想要删除一个Click事件,就要在FrmMain.cs[设计]中,找到这个按钮控件,然后在属性中,右键Click,单击重置即可;直接在代码中删除事件,而不是重置的话,执行的时候会发生错误【需要手动删除这个事件的委托】
    public partial class FrmMain : Form
    {
     
        public FrmMain()        //构造方法
        {
     
            InitializeComponent();
            
            // 将按钮的单击事件和事件响应方法结合【实际上是在另外的一个位置,这是放在这里便于观察】
            this.BTNTest.Click += new System.EventHandler(this.BTNTest_Click);
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
     

        }
        
        //事件的响应方法
        private void BTNTest_Click(object sender, EventArgs e)
        {
     
            MessageBox.Show("你好!");
        }
    }
增加两个响应方法:

增加的是两个事件断开和事件连接的按钮,这个是比较有用的,在设置下拉框的时候,如果不先断开会出错;


namespace WFDemo
{
     
    public partial class FrmMain : Form
    {
     
        public FrmMain()        //构造方法
        {
     
            InitializeComponent();
            // 将按钮的单击事件和事件响应方法结合
            this.BTNTest.Click += new System.EventHandler(this.BTNTest_Click);
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
     

        }
        //事件的响应方法
        private void BTNTest_Click(object sender, EventArgs e)
        {
     
            MessageBox.Show("你好!");
        }
		//事件断开按钮
        private void BtnSwitch_Click(object sender, EventArgs e)
        {
     
            this.BTNTest.Click -= new System.EventHandler(this.BTNTest_Click);
        }
		//事件关联按钮
        private void button1_Click(object sender, EventArgs e)
        {
     
            this.BTNTest.Click += new System.EventHandler(this.BTNTest_Click);
        }
    }
}

注意:

sender 表示的是事件源对象,但是在使用的时候需要强制类型转换为本来的类型,因为开始是object类;

  • 下面是公共响应事件的例子:
    C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第5张图片
// 主要看最后一个BtnTeacher_Click方法
namespace WFDemo
{
     
    public partial class FrmMain : Form
    {
     
        public FrmMain()        //构造方法
        {
     
            InitializeComponent();
            // 将按钮的单击事件和事件响应方法结合
            this.BTNTest.Click += new System.EventHandler(this.BTNTest_Click);

            //给三个按钮单击事件添加同一个事件响应方法
            this.BtnAndy.Click += new System.EventHandler(this.BtnTeacher_Click);
            this.BtnCarry.Click += new System.EventHandler(this.BtnTeacher_Click);
            this.BtnCoco.Click += new System.EventHandler(this.BtnTeacher_Click);
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
     

        }
        //事件的响应方法
        private void BTNTest_Click(object sender, EventArgs e)
        {
     
            MessageBox.Show("你好!");
        }

        private void BtnSwitch_Click(object sender, EventArgs e)
        {
     
            this.BTNTest.Click -= new System.EventHandler(this.BTNTest_Click);
        }

        private void button1_Click(object sender, EventArgs e)
        {
     
            this.BTNTest.Click += new System.EventHandler(this.BTNTest_Click);
        }

        private void button2_Click(object sender, EventArgs e)
        {
     

        }

        // 事件响应的公共方法(sender表示的是事件源对象)
        private void BtnTeacher_Click(object sender, EventArgs e)
        {
     
            string txt = ((Button)sender).Text;
            MessageBox.Show(txt + "您好!");
        }
    }
}

3)常用控件的事件

窗体的重要事件:
  • Load:窗体加载事件(应用较少);
  • FormClosing:窗体关闭之前发生的事件;
  • FormClosed:窗体关闭以后发生的事件;
文本框的重要事件:
  • TextChanged:文本框内容改变事件;
  • KeyPress:用户按下某键并释放的时候发生的事件;
  • MouseLeave:当鼠标离开文本框的时候发生;
下拉框的重要事件:
  • SelectedIndexChanged:当用户选择的下拉项改变的时候发生;

(三)消息提示的完整用法

消息提示要学会用,但是不能使用太多,因为需要手动关闭,影响用户体验;
C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第6张图片

演示:

C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第7张图片

// 这里只是写出事件的响应方法;并没有将单击事件与事件的响应方法相结合,这个工作是由虚拟机完成;
private void BtnTestMsg_Click(object sender, EventArgs e)
        {
     
            MessageBox.Show("请输入学员姓名!");
            MessageBox.Show("请输入学员姓名!", "验证提示");
            MessageBox.Show("请输入学员姓名!", "验证提示", MessageBoxButtons.OKCancel);
            MessageBox.Show("请输入学员姓名!", "验证提示",
                MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
                
			// 用户分别选择取消或者确定时候分别执行怎样的结果
			DialogResult result = MessageBox.Show("请输入学员姓名!", "验证提示",
                MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
            if(result == DialogResult.Cancel)
            {
     
                //用户取消操作
                MessageBox.Show("用户取消操作!");
            }
            else
            {
     
                //用户继续执行操作
                MessageBox.Show("用户继续操作!");
            }
        }
代码分析:

C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第8张图片
C#笔记——【面向对象基础】(五)Windows窗体与事件驱动_第9张图片

你可能感兴趣的:(C#)