- 博客(38)
- 收藏
- 关注
原创 WPF(1) 登录窗口作业完整笔记
表格容器特点是否分割窗体Grid网格容器,可以定义 RowDefinitions、ColumnDefinitions 划分单元格✅可以分割窗体StackPanel堆叠容器,垂直 / 水平顺序摆放控件,不切割窗体❌不会分割窗体。
2026-08-21 20:16:05
242
原创 C# .NET 网络 & 串口通信
✅特点:无连接、不可靠、无粘包、支持广播 ✅UDP Socket 网关最简示例(Modbus UDP 转串口)本质:操作系统原生套接字,TcpClient/UdpClient 内部都是封装 Socket,自由度最高。封装 Socket,代码简洁,适合 ModbusTCP、TCP 设备。不管做 TCP 服务端、UDP 网关、串口 Modbus、海康 SDK,不直接操作 Socket,厂商封装底层网络、码流、私有协议,C# 通过。封装 Socket Dgram,专门简化 UDP,✅特点:面向连接、可靠、有序、
2026-08-11 23:33:23
308
原创 SQL+C# 增删改查(练习)
存放数据库账号、地址、库名,所有窗体共用,不用重复写连接地址。实体类 = 数据盒子,一个对象装一组数据,下拉框批量绑定使用。下拉框绑定数据专用,封装「分类名称 + 分类编号」一对数据。先判断是否选中表格行,读取选中商品 id,打开编辑弹窗。模态弹窗,关闭后判断是否保存成功,成功则刷新。把两个日期控件格式改成空白空格,实现清空筛选时间。,插入 6 条测试数据,不用手动建库建表。窗体一打开,下拉框自动加载四个分类选项。,关闭弹窗通知 Form1 刷新表格。,直接关闭窗口,不保存任何数据。
2026-07-12 23:03:26
291
原创 Task异步练习(进度条)
窗体控件:4 个按钮(开启 / 暂停 / 继续 / 取消)、ProgressBar 进度条、Label 状态文本、DataGridView 表格(数字、值两列) 核心逻辑:后台异步循环生成 0~100 序列,同步刷新进度条与表格,支持暂停、续跑、取消、防重复启动、异常捕获,全程 UI 不卡顿。async void 仅用于 UI 事件:自定义异步方法必须返回Task,不能写 void;跨线程访问控件报错:后台线程修改 ProgressBar/Label/DataGridView 必须包裹Invoke;
2026-07-07 21:05:42
190
原创 WinForm自定义控件
csharp运行// 加[Category] [Description] 在属性面板分组、显示注释[Category("自定义样式")][Description("控件圆角大小")]set// 修改后重绘控件,刷新界面触发OnPaint重新绘制,属性修改立刻生效。定义事件委托触发事件的保护虚方法OnXXX满足条件时调用事件csharp运行// 1. 声明事件// 2. 保护虚方法,规范触发入口// 业务逻辑中触发忘记:父类原有绘制丢失(原生控件文字、背景消失);
2026-07-07 19:29:04
418
原创 WinForm练习知识补充(多线程)
创建 2 个并发后台任务:任务 1 休眠 1 秒、任务 2 休眠 2 秒;等两个任务全部执行完毕后,自动弹出提示框,全程不会阻塞 UI 窗口。点击按钮,同时开启两个后台并发任务(任务 A 休眠 2 秒、任务 B 休眠 4 秒);异步等待两个任务全部执行完毕后,直接修改 Label 文本,全程窗口不会卡顿、可自由拖动操作。点击按钮,同时开启 3 个带返回值的后台任务,分别计算 1~100、1~200、1~300 累加和;
2026-07-06 20:55:08
406
原创 Winform(多线程)
多线程目的:并行耗时任务,防止 UI 卡顿,利用多核 CPU;线程安全根源:多个线程同时读写共享资源;解决:lock、Interlocked、信号量;WinForm 子线程不能直接操作控件,使用 Invoke 或 async await;禁止使用强制杀线程,资源无法释放;推荐 CancellationToken 优雅取消;Task 优于 Thread,线程池复用降低性能损耗,是.NET 标准异步方案。
2026-07-03 19:38:06
362
原创 Winform(特性)
特性是一种用于给程序元素添加附加元数据的特殊类,本质继承。作用:给类、方法、属性、字段、参数、程序集打上标记,运行时通过反射读取标记信息,实现拓展逻辑。[特性名(参数)],放在目标元素上方本质:编译后元数据嵌入程序集,运行时反射可解析,使用时可省略Attribute后缀csharp运行// 限制:只能标记类、属性;不可重复标记;子类可继承// 构造函数:固定参数Min = min;Max = max;// 只读属性// 可选命名参数set;本质:特性 = 继承Attribute。
2026-07-03 19:09:47
253
原创 Winform加密算法
AES:加密算法加密或解密的过程采用同一个秘钥,是一个对称的加密算法 加密过程,先把明文分成一段一段的,先把第一段明文和秘钥以及初始向量进行异或运算,得到一个加密之后的密文,然后再拿出第二段明文和上一次密文进行异或运算,最终得到一个加密之后的文件。需要必备的参数秘钥:AES采用128位/192位/256位的秘钥IV 初始向量:为了让每次加密之后得到密文不一样,需要初始向量不一样。
2026-07-02 19:49:44
435
原创 Winform泛型和预处理指令
源代码指定了程序的定义,预处理指令(preprocessor directive)指示编译器如何处理源代码。例如,在某些情况下,我们希望编译器能够忽略一部分代码,而在其他情况下,我们希望代码被编译,这时我们就可以使用预处理指令了。C++开发人员应知道,在C 和C++中预处理器指令非常重要,但是,在C#中,并没有那么多的预处理器指令,它们的使用也不太频繁。C#提供了其他机制来实现许多C++指令的功能,如定制特性。
2026-06-30 19:29:07
181
原创 Winform(文件读写)
程序运行时出现意料之外的错误,正常代码流程直接中断、软件闪退,这个错误叫异常 (Exception)。流结尾异常JSON 格式写错:Json 解析异常。
2026-06-23 19:24:20
185
原创 Winform窗体重构造
方法名必须和类 / 窗体名称完全相同(例:窗体叫 Form2,构造函数名只能是 Form2)无返回值,不能写voidintStudent等任何返回类型创建窗体实例时,程序自动优先执行,早于Form_Load加载事件。
2026-06-21 17:02:23
238
原创 Winform课程第四天(进阶)
表格分类控件用途窗体位置数据展示TreeView层级树形目录窗体中间数据展示ListView表格 / 多视图列表窗体中间顶部功能MenuStrip主下拉菜单窗体最顶部顶部功能ToolStrip快捷工具栏MenuStrip 下方底部状态状态、进度提示窗体最底部后台托盘NotifyIcon右下角后台图标底部组件栏辅助组件ImageList、Timer、对话框等配套功能底部组件栏文件操作FileStream底层文件读写代码逻辑。
2026-06-16 17:35:47
228
原创 WinForm课程第二天(进阶)
是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。当用户打开非模态对话框时,依然可以操作其他窗口。例如,Windows提供的记事本程序中的【查找】对话框。Form.ShowDialog()方法 (窗体显示为模态窗体) Form.Show方法()方法 (窗体显示为非模态窗体)
2026-06-11 17:47:15
161
原创 WinForm课程第一天(进阶)
WinForm是 Windows Form 的简称,是微软提供的一种构建(GUI)框架,主要用于Windows平台的桌面应用程序开发。
2026-06-11 11:18:15
183
原创 第八天课程(基础)
定义一个事件:语法 public event 事件类型 事件名event 关键字EventHandler 事件的基类MyClick 事件名。事件:具体的一个操作,例如鼠标点击操作、鼠标移动等操作,事件基于委托实现。事件基于发布-订阅设计模式进行实现的发布类: 是一个包含事件和委托定义的对象订阅类:是一个接受事件并提供事件处理程序。给事件赋值:事件其实就是委托的实例EventHandler 要求函数必须有两个参数。
2026-06-04 18:48:34
17
原创 第十七天课程(基础)
委托:delegate(关键字) 委托是一个存储函数的引用类型,定义委托的时候一定按照方法的类型进行定义。委托:1 委托是一个引用类型2 存放方法的3 委托可以通过实例化绑定一个方法4 可以通过委托间接调用方法5 委托作为另一个函数的参数进行使用,其实回调函数的作用。
2026-06-03 17:33:47
25
原创 第十五天课程(基础)
虚方法和抽象方法:1 虚方法可以定义在普通类中,抽象方法只能定义抽象类中2 虚方法可以有方法体, 抽象方法不能有方法体3 虚方法在派生类里面可以不用实现,抽象方法在派生类里面必须实现4 虚方法和new 或者override进行联合使用父类的虚方法 需要在子类通过override进行重写,覆盖父类的方法, 也可以不用重写,调用的父类的方法。
2026-06-01 18:52:46
30
原创 第十四天课程(基础)
非静态找对象去调用:类名 对象名=new 类名;静态的方法 类名.属性/方法;静态属性定义在类空间里面,每一个实例都拥有同一个静态数据;非静态属性 每个实例拥有对立一份数据。非静态的方法可以使用静态属性和静态方法。如果直接调用非静态的方法 不允许的,但是如果使用new 创建一个新的 ,这个新的对象可以调用。静态方法只能使用静态的属性和静态方法。
2026-05-29 18:55:40
29
原创 第13天课程(基础)
概念:C# 中的Hashtable是.NET 早期非泛型键值对哈希集合,基于哈希算法实现快速查找,存在装箱拆箱、类型不安全问题,现已被泛型Dictionary替代。核心原理:放入数据给一个 Key 和 Value,通过哈希函数把 Key 转换成一个数字(哈希码) ,根据这个数字直接定位存储位。格式:Hashtable 变量名 = new Hashtable();1Add() 添加键值对;table.Add(0,"这是0");2哈希表键值对个数;3取值4修改。
2026-05-28 19:01:12
37
原创 第十二天课程(基础)
/创建一个动态集合对象1添加元素 把1转成对象类型之后 再添加到动态集合里面,把值类型转成引用类型的过程,就是装箱操作示例: list1.Add(1);2取出元素 通过索引值取出元素值示例: Console.WriteLine(list1[0]);(此法不能去出元素值)list1[0]本身一个对象,需要转成值类型,这个过程就是拆箱3 AddRange() 添加一个范围 可以添加一个数组类型的数据. 也可以添加一个集合类型数据。
2026-05-27 18:59:05
336
原创 第十一天课程(基础)
方法:非静态方法 和 静态方法// 从0开始 清空长度为nums.Length。//Join 把数组的元素按照字符串方式进行打印。3. copy方法//copy 把[]里的数组元素复制到指定数组内。参数1 要复制的数组参数2 复制源数组的位置参数3 要复制的目标数组参数4 复制到目标数组的位置参数5 复制的长度例如:Array.Copy(nums1,1, nums2, 1,2);3 indexOf() 查询元素的索引值从开头找到第一个匹配的元素后结束。
2026-05-26 18:39:41
187
原创 课程第十天(基础)
定义数组:数据类型[] 变量名;变量名一般在后面加s 例如names ages等1.int[] a;//定义整型数组,默认值为0;2.bool[] a;//定义布尔数组 默认值为false//定义字符串数组 默认值null// 定义字符数组 ,默认值是""//赋值长度为10空数组;7. names = new string[5] {"张三", "张三" ,"张三", "张三", "张三" };//赋值的时候指定长度和初始化元素。//不指定长度 长度由元素个数确定。
2026-05-25 18:53:44
51
原创 课程第八天(基础)
产生随机数的方式:1使用Random创建对象:(10)10是一个种子,产生随机数的时候需要初始向量,根据初始向量生成一系列的随机数,从随机数队列当中取出下一个随机数如果种子一样 产生的随机数就是一样的。以下了解GUID: 即Globally Unique Identifier(全球唯一标识符)GUID的计算依赖当前的系统时间,计算机的硬件ID码等进行计算,生成128位随机数,无限接近于为唯一的输出使用场景:生成产品秘钥 订单号 .....
2026-05-21 19:07:46
177
原创 课程第七天(基础)
值传递,传递进方法中的是值,在方法内部修改,不会影响到外部。使用对象名.属性的方式修改,影响到外部, 使用new 创建对象方式不会影响外部实参。
2026-05-20 19:04:19
193
原创 课程第六天(基础)
定义方法public 方法修饰符,一般定义公共的static 静态的方法(目前使用static) ,不写static 非静态方法void 方法的返回值,无返回值 不能赋值给一个变量Test 方法名字 符合大驼峰命名规则(int a,int b,) 参数列表{} 方法体方法调用:如果方法是static 使用类名打点去调用如果方法是没有static 使用对象.调用,前提先new 一个对象// 调用方法的时候会把方法里面全部执行一遍,Test();// 可以把类名省掉方法一定要去调用。
2026-05-20 12:59:10
378
原创 课程第5天(基础)
格式:for(外层初始化;{ for(内层初始化;注:标签名的位置要在你要跳回语句的上一行。注:外层循环执行一次,内层循环执行一边。goto start;start: // 定义标签。
2026-05-19 09:00:06
32
原创 课程第二天(基础)
-:自减,自身减一;赋值:=, +=,-=,*=,/=,%= 注:后四个可 a=a+3 (a+=3)进行理解。&(与),|(或),^(异或),&&(短路与),||(短路或),!自加1,自减1a = ++b, a= b++ 区别。
2026-05-13 20:06:24
163
原创 课程第一天(基础)
Net FrameWork 可以用来创建Windows应用程序,即所说的Winform开发;不能和C#关键字,类库名重名 命名规范: 1.简洁明了 2.驼峰。的框架,可以运行在Windows、MAC、Linux系统上。c#语言是运行在.net平台上的高级语言之一。引用类型(Reference types)三个斜杠: /// 用在方法前,类前,指针类型(Pointer types)开发就是指的Web Form开发;是微软推出的最新的开源的,MVC开发,经常所说的。单行://xxxxx。
2026-05-12 19:49:13
551
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅