C#笔记(5)
一、winform项目与窗体控件
1、部分类的使用
好处:让自动生成的代码后置,我们编写程序的代码显得更加简洁
特点:在最后编译的时候,仍然编译成一个窗体类。
- 窗体和控件的基本使用
3、Event事件(委托--》事件)
理解事件:
在.Net平台上面,给我们所用的这些控件,封装了很多的事件。所谓事件,就是对用户操作的某一个行为进行封装。比如,当用户点击一个按钮的时候,单击这个动作,已经被封装成了Click事件,那么我们只要把这个事件拿出来,当用户触发单击这个动作的时候,也就是这个事件被调用了,我们就可以在这个事件中,完成我们需要的任务。
InitializeComponent();//调用Desinger类中的方法,用于控件初始化
Sender表示当前控件的对象
二、学会:
【1】能够找到我们需要的控件事件。
【2】根据事件生成事件方法,并编写业务逻辑。
【3】如果事件不在需要,要知道如何把事件关联(委托)和事件方法的删除,如果址删除一个事件方法会报错。
【4】窗体的俩个事件,并且学会窗体关闭前的确认逻辑是如何处理的!
事件参数:
//窗体关闭后发生的private void Form1_FormClosed(object sender, FormClosedEventArgs e){//可以在这里编写要做的其他任务// MessageBox.Show("窗体关闭了","",MessageBoxButtons.OK);}
核心内容:窗体常用属性、按钮常用属性、按钮单击事件、生成方法、事件删除方法、窗体常用事件和退出确认的实现。
- 事件的集中响应
原理:就是相同的控件、可以关联同一事件响应方法
好处:可以集中处理数据
核心内容:按钮的集中添加和Tag数据的封装、窗体Controls集合优化事件关联。
- 事件通用处理中数据的获取
核心内容:在按钮事件中获取数据的方法、对象的封装、泛型集合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}");}}}}
相关文章:

C#笔记(5)
一、winform项目与窗体控件 1、部分类的使用 好处:让自动生成的代码后置,我们编写程序的代码显得更加简洁 特点:在最后编译的时候,仍然编译成一个窗体类。 窗体和控件的基本使用 3、Event事件(委托--》事件&#…...
【软件国产化】| Windows和Linux下文件名后缀是否区分大小写
今天在开发过程中遇到了个软件在Linux系统和Windows系统下功能表现不一致的bug,具体表现为: 插入一张图片(A文件夹中的001.jpg),然后使用“图片替换”功能,用B文件夹中的图片(B文件夹中的001.JP…...
讨论JAVA、JVM与Spring
Q1: 作为一个JAVA开发人员,对于jvm肯定不陌生,但很多人对它不陌生也仅止于概念上,而且对概念也是模糊不清的,但jvm实际是java程序运行在其中的实际存在的环境,对它的理解应该要是具象化的。 我们还是从一项技术产生的…...

【04】MySQL数据库和数据表的基本操作详解与实例
文章目录 一、连接MySQL服务器二、数据库的基本操作2.1数据库的基本操作1. 创建数据库2. 选择数据库3. 删除数据库4.查询所有数据库5.修改数据库的字符集 2.2 数据表的基本操作1. 创建数据表2. 查看数据表结构3. 删除数据表4. 修改数据表5. 插入数据6. 查询数据7. 更新数据8. 删…...
Spring中实现动态数据源切换,基于AbstractRoutingDataSource
背景 在项目开发过程中,我们可能会遇到一个场景:某个类型数据源有多个数据源实例,需要我们按照不同的请求切换到不同数据源去。 而目前绝大多数java应用都是基于Spring框架来开发,我们很多时候相关的数据源连接都是交给了Spring框…...

StarRocks-join优化
1、背景 有两个大表,都是6kw级别上下的,通过SR然后包装了一个接口对外提供查询,当前的问题是,这样大的join查询会导致BE直接宕机。并且这个sql很有代表性,我截图如下: 这个表是个单分区,所以直接…...

js 高亮文本中包含的关键词标红
在开发中,遇到需要将文本中包含的关键字高亮的情况,可以做以下处理。 <div class"title"v-html"highlightKeywords(item.title, state1.tags1.concat(state2.tags2).concat(state3.tags3))"> </div> ...... ...... con…...

DVWA靶场——File Inclusion
File Inclusion(文件包含)漏洞 指攻击者通过恶意构造输入,利用应用程序错误的文件包含机制,导致程序包含并执行未经授权的本地或远程文件。这类漏洞广泛存在于Web应用程序中,尤其是在那些允许用户提供文件路径或URL的地…...

Android Framework禁止弹出当前VOLTE不可用的提示窗口
文章目录 VoLTE简介VoLTE 的优势 当前VOLTE不可用的弹窗弹窗代码定位屏蔽弹出窗口 VoLTE简介 VoLTE(Voice over LTE)是一种基于4G LTE网络的语音通话技术。它允许用户在4G网络上进行高质量的语音通话和视频通话,而不需要回落到2G或3G网络。V…...

OceanBase 大数据量导入(obloader)
现需要将源数据库(Oracle|MySQL等)一些表的海量数据迁移到目标数据库 OceanBase 中,基于常规 jdbc 驱动编码的方式涉及开发工作,性能效率也要看编码的处理机制。 OceanBase 官方提供了的 OceanBase Migration Service (OMS) 数据…...

w058基于web的美发门店管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文件࿰…...
实时数据开发 | checkpoints监控和调优
监控Checkpoints 监控 checkpoint 行为最简单的方法是通过 UI 的 checkpoint 部分。 监控这两个指标: 算子收到第一个 checkpoint barrier 的时间。当触发 checkpoint 的耗费时间一直很高时,这意味着 checkpoint barrier 需要很长时间才能从 source 到达 operator…...
el-tree的使用及控制全选、反选、获取选中
el-tree的使用及控制全选、反选、获取选中 组件使用获取选中的id全选实现反选实现全部代码 组件使用 引入组件,可以参考官网组件引入参考官网示例写好基础数据结构,不知道怎么转换树形机构的看文章:一维数组转树形 <template><el-…...

机器学习(二十五):决策树算法以及决策树和神经网络的对比
一、决策树集合 单一决策树会对训练数据的变化很敏感。例子:输入十个数据,判断是否是猫。只替换其中一个数据,信息增益最高的分裂特征就发生了改变,决策树就发生了变化。 使用决策树集合可以使算法更加健壮。例子:使用…...

新版布谷直播软件源码开发搭建功能更新明细
即将步入2025年也就是山东布谷科技专注直播系统开发,直播软件源码出售开发搭建等业务第9年,山东布谷科技不断更新直播软件功能,以适应当前新市场环境下的新要求。山东布谷科技始终秉承初心,做一款符合广大客户需求的直播系统软件。支持广大客户提交更多个…...
vue3 reactive响应式实现源码
Vue 3 的 reactive 是基于 JavaScript 的 Proxy 实现的,因此它通过代理机制来拦截对象的操作,从而实现响应式数据的追踪。下面是 Vue 3 的 reactive 源码简化版。 Vue 3 reactive 源码简化版 首先,我们需要了解 reactive 是如何工作的&…...

git的使用(简洁版)
什么是 Git? Git 是一个分布式版本控制系统 (DVCS),用于跟踪文件的更改并协调多人之间的工作。它由 Linus Torvalds 在 2005 年创建,最初是为了管理 Linux 内核的开发。Git 的主要目标是提供高效、易用的版本控制工具,使得开发者…...
使用命令行创建 Maven 项目
本指南将引导您通过命令行创建一个简单的 Maven 项目。本教程假设您已经在您的机器上安装了 Maven 和 JDK 21。 第一步:验证 Maven 和 Java 安装 在开始之前,我们需要验证 Maven 和 Java 是否已正确安装在您的系统上。 验证 Maven 安装 打开命令行终…...

JVM_栈详解一
1、栈的存储单位 **栈中存储什么?**, 每个线程都有自己的栈,栈中的数据都是以栈帧(Stack Frame)的格式存在。在这个线程上正在执行的每个方法都各自对应一个栈帧(Stack Frame)。 栈帧是一个内存…...
Linux 金仓数据库安装和使用
文章目录 Linux 金仓数据库安装和简单使用 一、下载二、安装三、启动法1. 通用启动方式法2. 系统服务启动方式 四、测试五、DB管理工具1. 启动DB管理工具2. DB管理工具的常用功能 六、卸载 Linux 金仓数据库安装和简单使用 一、下载 打开官网 https://www.kingbase.com.cn/xzz…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...