C#笔记(5)

embedded/2024/11/28 16:26:23/

一、winform项目与窗体控件

1、部分类的使用

好处:让自动生成的代码后置,我们编写程序的代码显得更加简洁

特点:在最后编译的时候,仍然编译成一个窗体类。

  1. 窗体和控件的基本使用

3、Event事件(委托--》事件)

理解事件:

在.Net平台上面,给我们所用的这些控件,封装了很多的事件。所谓事件,就是对用户操作的某一个行为进行封装。比如,当用户点击一个按钮的时候,单击这个动作,已经被封装成了Click事件,那么我们只要把这个事件拿出来,当用户触发单击这个动作的时候,也就是这个事件被调用了,我们就可以在这个事件中,完成我们需要的任务。

InitializeComponent();//调用Desinger类中的方法,用于控件初始化

Sender表示当前控件的对象

二、学会:

【1】能够找到我们需要的控件事件。

【2】根据事件生成事件方法,并编写业务逻辑。

【3】如果事件不在需要,要知道如何把事件关联(委托)和事件方法的删除,如果址删除一个事件方法会报错。

【4】窗体的俩个事件,并且学会窗体关闭前的确认逻辑是如何处理的!

事件参数:

        //窗体关闭后发生的private void Form1_FormClosed(object sender, FormClosedEventArgs e){//可以在这里编写要做的其他任务// MessageBox.Show("窗体关闭了","",MessageBoxButtons.OK);}

核心内容:窗体常用属性、按钮常用属性、按钮单击事件、生成方法、事件删除方法、窗体常用事件和退出确认的实现。

  1. 事件的集中响应

原理:就是相同的控件、可以关联同一事件响应方法

好处:可以集中处理数据

核心内容:按钮的集中添加和Tag数据的封装、窗体Controls集合优化事件关联。

  1. 事件通用处理中数据的获取

核心内容:在按钮事件中获取数据的方法、对象的封装、泛型集合List运用

三、控件或窗体右键属性

c# ContextMenuStrip控件简单用法-CSDN博客

C# Winform MessageBox的用法 各种类型弹出框-CSDN博客

winform窗体关闭事件的实例-CSDN博客

  • 事件的集中响应

复制(Ctrl+拖动)控件时它的事件也会复制

原理:相同的控件,可以关联同一个事件响应方法

好处:我们可以集中处理数据

容器控件(Panel等...):

在容器中放控件必须加到对应的容器的集合(Controls)里面

代码实例:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace client_sideUI
{public partial class Form1 : Form{private List<string> Clacklist = new List<string>();//数据绑定控件private BindingSource bindingSource = null;/// <summary>/// 构造方法:初始化所有的控件/// </summary>public Form1(){//this.button1.Text = "111";//在初始化的方法前面不要写任何代码InitializeComponent();//调用Desinger类中的方法,用于控件初始化//将控件的Click事件和事件方法关联this.button1.Click += new System.EventHandler(this.buttonNoe_Click);//我们想完成控件或其他初始化内容,在构造方法中写!SetupDataBinding();}// 设置数据绑定private void SetupDataBinding(){bindingSource = new BindingSource();// 使用匿名类型转换字符串列表var bindingList = Clacklist.Select(s => new { 课程名称 = s }).ToList();bindingSource.DataSource = bindingList;dataGridView1.DataSource = bindingSource;}// 刷新DataGridView显示private void RefreshGridView(){SetupDataBinding();//刷新数据bindingSource.ResetBindings(false);//重新加载数据dataGridView1.Refresh();}//事件方法private void button1_Click(object sender, EventArgs e){}//事件方法private void buttonNoe_Click(object sender, EventArgs e){//sender表示当前控件的对象//Button btn = sender as Button;Button btn = (Button)sender;MessageBox.Show("btnclick");//选中单选框this.checkBox1.Checked = true;//我们也可以动态的取消事件的关联//this.button1.Click -= new System.EventHandler(this.buttonNoe_Click);}//窗体所有控件和初始化完毕后要执行的事件,我们通常不用private void Form1_Load(object sender, EventArgs e){//不建议在这里写初始化内容}//窗体关闭之前发生的private void Form1_FormClosing(object sender, FormClosingEventArgs e){if ((MessageBox.Show("确定关闭吗", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)){e.Cancel = false;}else{//不关闭窗体e.Cancel = true;}}//窗体关闭后发生的private void Form1_FormClosed(object sender, FormClosedEventArgs e){// MessageBox.Show("窗体关闭了","",MessageBoxButtons.OK);}//private void button1_MouseEnter(object sender, EventArgs e)//{//    Button btn = sender as Button;//    //tag属性可以随便写值//    btn.Tag = "btn1";//    MessageBox.Show(btn.Tag.ToString());//}//关闭窗体private void button2_Click(object sender, EventArgs e){this.Close();}private void label1_Click(object sender, EventArgs e){Label label = (Label)sender;label.Text = "1";}private void button3_6_Click(object sender, EventArgs e){Button button = (Button)sender;Clacklist.Add(button.Tag.ToString());//bindingSource.DataSource = Clacklist;MessageBox.Show($"{Clacklist[0].ToString()}");RefreshGridView();}private void button7_Click(object sender, EventArgs e){Clacklist.Clear();RefreshGridView();}}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace client_sideUI
{public partial class Exercise : Form{//实体类class Coure{public int Coureid { get; set; }public string CoureName { get; set; }//public String CoureHour { get; set; }}private List<Coure> ts = new List<Coure>();public Exercise(){InitializeComponent();int i = 0;foreach (Control control in this.groupBox1.Controls){//if(control is Button)//通过控件类型过滤我们不需要的控件//{//    Button button = control as Button;//    if (button.Text != "保存")//    {//        button.Tag = button.Text + $"{i}";//        button.Click += new System.EventHandler(this.btn_Click);//    }//}string originalText = control.Text;string textWithoutLastChar = originalText.Remove(originalText.Length - 1);if (control is Button && control.Text.ToString() != "保存"){// control.Tag = control.Text + $"{i}";control.Click += new System.EventHandler(this.btn_Click);string newText = textWithoutLastChar + $"{i}";control.Text = newText;}i++;}}//事件集中处理方法private void btn_Click(object sender, EventArgs e){Button btn = sender as Button;//MessageBox.Show(btn.Tag.ToString());//btn.BackColor = Color.AliceBlue;//将当前课程信息封装到课程对象,并将课程对象封装到列表中this.ts.Add(new Coure{CoureName = btn.Text,Coureid = Convert.ToInt32(btn.Text.ToString().Substring(btn.Text.Length - 1))});//改变当前按钮的背景色btn.BackColor = Color.Green;}//保存课程private void button13_Click(object sender, EventArgs e){foreach(var item in ts){//MessageBox.Show($"{item.CoureName}" +$"{item.Coureid}");Console.WriteLine($"{item.CoureName}" +"----"+$"{item.Coureid}");}}}}


http://www.ppmy.cn/embedded/141220.html

相关文章

代理模式 (Proxy Pattern)

文章目录 代理模式 (Proxy Pattern)原理分类优点缺点示例代码静态代理1. 定义接口2. 创建真实类3. 创建代理类4. 客户端代码输出结果 动态代理&#xff08;基于 JDK&#xff09;1. 定义接口和真实类2. 创建动态代理类3. 客户端代码输出结果 UML 类图静态代理动态代理 使用场景小…

Qt中的套件(如MSVC2019)提示no complier set in kit

起因 是我想在qt创建自定义控件新建项目的时候发现有黄色警告&#xff1a;提示no complier set in kit 但是其实我早发现了但是我选择忽视然后选择了minGW编译器。。。。但是现在我不得不解决呜呜呜呜&#xff08;小声&#xff09; 提示原因是因为没有编译器&#xff0c;所以…

【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 &#x1fab2;前言 在这篇博客中&#xff0c;我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求&#xff0c;…

HarmonyOS开发:DevEco Studio的Beta3(5.0.5.200)新增和增强特性

新增特性 DevEco Studio支持开发API 13工程。DevEco Profiler Frame模板新增Lost Frames和Hitch Time泳道&#xff0c;用于识别和优化卡顿和丢帧现象。具体请参考Frame分析。hvigor-config.json5中properties下新增ohos.arkCompile.noEmitJs字段&#xff0c;用于指定ArkTS编译…

基于 Nginx Ingress Controller 的四层(TCP)转发配置

基于 Nginx Ingress Controller 的四层&#xff08;TCP&#xff09;转发配置 1. 简介 本指南将展示如何通过配置 ConfigMap 来实现 Nginx Ingress Controller 的四层转发&#xff08;TCP&#xff09;&#xff0c;并通过配置测试应用程序验证配置的有效性。本文中使用的 Kuber…

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…

人工智能在医疗保健领域的潜在应用

人工智能在医疗保健领域的潜在应用 一、影像识别与辅助诊断 医学影像解读 医学影像解读一直是医生的重要工作之一&#xff0c;然而由于医学影像学习曲线陡峭、误诊率高等问题&#xff0c;这一领域迫切需要人工智能技术的介入。利用深度学习算法&#xff0c;人工智能可以对医学影…

汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳

故障现象  一辆2017款捷豹F-PACE车&#xff0c;搭载2.0 L GTDi发动机&#xff0c;累计行驶里程约为16万km。车主反映&#xff0c;车辆组合仪表上发动机故障灯点亮&#xff08;图1&#xff09;&#xff0c;且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…