WinForm
本专栏记录博主从C#小白到独立开发大型上位机软件的过程中的学习笔记,包括拓展知识和C#、winform学习笔记,实战小工具源码分享,实战项目分享,行业知识等,“师傅领进门,修行靠个人”,希望能帮助小伙伴少走弯路,也同时希望大家多多交流,共同进步。
智驾
“面朝大海,春暖花开”
展开
-
【教程】七天入门C#上位机目录
目录1. 概述1.1 目标1.2 学习资源1.3 学习建议1.4 宣传语2. 系列目录1. 概述1.1 目标总结项目成果,分享实战经验。通过本教程的练习,期望达到简单上位机的开发,能提高工作效率。1.2 学习资源vs2019安装和使用教程(详细)CSDN博主:悲恋花丶无心之人的这篇博文很详细地讲解了visual studio的安装下载,对于刚上手C#开发的同学有参考意义,工欲善其事必先利其器。菜鸟教程 C#教程基础知识讲解全面到位,代码例程很多,能够满足对于基础语法的了解和学习。原创 2020-09-13 10:43:52 · 14759 阅读 · 10 评论 -
C# winform中无标题栏窗口如何实现鼠标拖动?
在C# winform中,可以通过重写窗体的鼠标事件来实现无标题栏窗体的拖动。原创 2023-08-23 16:02:50 · 1346 阅读 · 0 评论 -
C#winform中Icon图标获取方式
想要给winform的窗口添加一个图标,可以看到,需要添加.ico的格式。点击左上角的属性,弹出图片信息,在转格式中,选择.ico,并保存即可。原创 2023-07-25 15:52:45 · 1744 阅读 · 0 评论 -
C# winform窗体全屏显示设置
窗体全屏显示,并覆盖桌面任务栏。原创 2023-07-21 20:16:01 · 6662 阅读 · 1 评论 -
字符串转hex小工具
字符串转hex小工具分享原创 2023-03-01 11:08:11 · 1172 阅读 · 0 评论 -
C# winform抽拉式菜单栏设计的一种方法
文章目录背景设计方法描述控件设计关键点代码实现扩展背景使用C#开发上位机,通常需要设计菜单栏,工具箱中已有的“标签”或者开源的模板要么太单调、要么没有那么高的“逼格”,如果要做出让人眼前一亮的UI界面,则需要想想怎么能用最简单的模块搭建一个高大上的菜单栏。博主本篇主要想描述的是一种设计方法,并不对代码和步骤做过多的讲解和展示,不是基础性的博文。参考该方法不仅仅能组合出好看易用的菜单栏,也可以根据需求和创意进行扩展。原创 2022-05-10 13:29:32 · 3173 阅读 · 1 评论 -
【C#学习笔记】同步&异步
文章目录1. 同步&异步2. 什么是异步编程3. 异步编程的两种用途4. 异步编程的两种用途5. 异步函数1. 同步&异步2. 什么是异步编程3. 异步编程的两种用途4. 异步编程的两种用途5. 异步函数...原创 2021-09-10 14:00:14 · 1195 阅读 · 0 评论 -
C# 异步操作和线程的区别
文章目录异步操作线程参考异步操作private Task _consumerTask;private Task _producerTask;//......_consumerTask = Task.Factory.StartNew(Consumer);_producerTask = Task.Factory.StartNew(Producer);//......private void Consumer(){//......}private void Producer(){/原创 2021-09-09 13:37:59 · 431 阅读 · 0 评论 -
C#多线程专题笔记
文章目录前言Thread容易出现的问题“未将对象引用设置到对象的实例”参考前言进程:程序在服务器上运行时,占据的计算资源的合集,称之为进程。进程之间不会相互干扰——进程间的通信比较困难(分布式)线程:程序执行的最小单位,响应操作的最小执行流。线程也包含自己的计算资源,线程是属于进程的,一个进程可以有多个线程。多线程:一个进程里面,有多个线程并发执行。Thread多线程的Thread类,就是一个封装,是.NetFramework对线程对象的抽象封装,通过Thread去完成的操作,最终是通过向操作原创 2021-09-09 13:36:45 · 452 阅读 · 0 评论 -
C# 委托学习笔记
文章目录前言委托的用法前言为啥引入委托写程序的原则之一就是“封闭变化”,需求再怎么变化,我们写的程序改动最小,或者在设计之初就能预想到将来的变化,而做最小的改动。看一个反面的例子: class Program { enum 返回值 { max, min, } static int Max(List<int> nums, 返回值 retType) {原创 2021-07-18 17:00:30 · 285 阅读 · 0 评论 -
C#编程细节记录
目录结构枚举异常泛型操作符重载结构结构,struct是值类型可以方便滴定义零散的数据,成为整个一个“块”struct Location //结构体{ public int X; public int Y; public Location (int x, int y){this.X = x; this.Y = y;}}static void test(Location loc){ loc.X = 1; loc.Y = 1;}static void Main(strin.原创 2021-07-16 19:57:52 · 240 阅读 · 1 评论 -
backgroundWorker控件使用笔记
文章目录前言解决办法参考前言通常,如果做一个稍微复杂的winform界面项目,会遇到前端界面因后端进程持续被占用而导致显示卡顿的情况。简单的做法就是前后端分离,即两部分程序跑在两个不同的进程中,实际操作如下文所述:解决办法界面加载时,开启后台运行进程,将后端数据处理,放在后台进程中第一步:拖拽控件第二步:修改属性第三步:调用在界面加载的时候,运行开始后台进程backgroundWorker1.WorkerReportsProgress = true;backgroundWorke原创 2021-07-16 13:56:48 · 336 阅读 · 0 评论 -
Winform中如何设置抽拉式界面
我用的控件模板是:KryptonForm具体可以参考:C#界面开发终极UI工具包分享——Krypton抽拉式:原创 2021-07-10 10:23:21 · 644 阅读 · 0 评论 -
C# 文本框输入历史提示实现方法
参考博文:C# WinForm TextBox猜想输入和历史记录输入(源码)原创 2021-02-17 23:44:48 · 711 阅读 · 0 评论 -
C# 枚举&结构体
文章目录1. 枚举2. 结构体1. 枚举枚举实例:using System;namespace HelloEnum{ class Program { static void Main(string[] args) { Person person = new Person(); person.Level = Level.Employee; Person boss = ne原创 2021-02-17 16:12:30 · 390 阅读 · 0 评论 -
C#泛型
文章目录实例:using System;namespace HelloGeneric{ internal class Program{ static void Main(string[] args){ Apple apple = new Apple() { Color = "Red" }; AppleBox box = new AppleBox() { Cargo = apple }; C原创 2021-02-17 14:02:50 · 291 阅读 · 0 评论 -
C# 参数详解
文章目录概述1. 传值参数2. 引用参数3. 输出参数4. 输出参数5. 扩展参数概述1. 传值参数实例:using System;namespace ParametersExample{ class Program{ static void Main(string[] args){ int y = 1; IWantSideEffect(ref y); Console.WriteLine原创 2021-02-16 02:43:44 · 1099 阅读 · 0 评论 -
C# 反射与依赖注入
文章目录1. 反射与依赖注入1.1 接口隔离原则1.1.11.1.21.1.3 显示接口实现2. 反射2.1 反射应用1. 反射与依赖注入反射:以不变应万变(更松的耦合)反射与接口的结合反射与特性的结合依赖注入:此DI非彼DI,但没有彼DI就没有此DI…1.1 接口隔离原则1.1.1实例:using System;namespace IspExample{ class Program { static void Main(string[]原创 2021-02-16 00:50:07 · 1312 阅读 · 3 评论 -
C# 事件
文章目录1. 初步了解事件2. 事件的应用3. 事件的声明1. 初步了解事件2. 事件的应用3. 事件的声明原创 2021-02-16 00:48:16 · 441 阅读 · 0 评论 -
C# 变量
文章目录1. 什么是类型2. 类型在C#语言中的作用1. 什么是类型2. 类型在C#语言中的作用原创 2021-02-16 00:47:37 · 328 阅读 · 0 评论 -
C# 方法
1. 方法的由来构造器默认构造器手动构造器构造器的内存原理方法的重载原创 2021-02-16 00:47:00 · 313 阅读 · 0 评论 -
C# 接口和抽象类
文章目录1. 什么是接口和抽象类2. 接口与单元测试3. 依赖&耦合4. 依赖翻转5. 单元测试1. 什么是接口和抽象类接口和抽象类都是“软件工程产物”具体类->抽象类->接口:越来越抽象,内部实现的东西越来越少抽象类是未完全实现逻辑的类(可以有字段和非public成员,它们代表了“具体逻辑”)抽象类为复用而生:专门作为基类来使用,也具有解耦功能封装确定的,开放不确定的,推迟到合适的子类中去实现接口是完全未实现逻辑的“类”(“纯虚类”;只有函数成员;成员全部publi原创 2021-02-16 00:45:18 · 767 阅读 · 0 评论 -
C# 字段、属性、索引器、常量
文章目录1. 字段2. 属性3. 索引器4. 常量1. 字段实例字段和静态字段的功能:using System;using System.Collections.Generic;namespace DataMemberExample{ class Program{ static void Main(string[] args){ List<Student> stuList = new List<Student>()原创 2021-02-16 00:44:22 · 1485 阅读 · 0 评论 -
C#界面开发终极UI工具包分享——Krypton
版本原创 2020-12-30 22:38:17 · 7233 阅读 · 0 评论 -
C# 串口开发填坑记
C# 串口开发填坑记串口虽然简单,但是想要做得“耐用”,还是要花些心思!本文把开发中遇到的问题总结,希望能帮到各位小伙伴。1. 界面数据更新报错因为,串口接收和界面显示更新不属于同一线程,如果在接收到串口数据后就直接更新到UI,报错:解决方案:this.BeginInvoke((EventHandler)(delegate{ //在这里给控件赋值}));2. 关闭串口界面卡死之前的程序是直接关闭串口界面,报错后,查了一下资料,意识到要把串口关闭了(释放资源),根据网友的经验,加原创 2020-12-30 13:23:46 · 623 阅读 · 0 评论 -
UI控件跨线程更新方法总结
UI控件跨线程更新方法总结参考资料:【1】C# 跨线程调用控件【2】C# Winform 跨线程更新UI控件常用方法汇总(多线程访问UI控件)原创 2020-12-28 16:38:12 · 238 阅读 · 0 评论 -
C# 数据绑定
参考资料【1】C#数据绑定(1)—简单的文本框绑定【2】原创 2020-12-28 16:37:07 · 709 阅读 · 0 评论 -
C# Socket实战源码
类IPEndPoint是抽象类EndPoint的实现类Socket对象的RemoteEndPoint、LocalEndPoint都是这个类型属性Address:使用IPv4表示的地址属性Port:使用int表示的端口类Socket这个类既可以用于服务器端的开发,也可以用于客户端的开发;构造方法:参数AddressFamily:指定使用IPv4的地址InterNetwork;参数SocketType:指定使用流式传输Stream;参数ProtocolType:指定协议类型Tc原创 2020-12-08 11:37:43 · 1090 阅读 · 0 评论 -
【C#学习笔记】SqLite开发踩的坑
找不到.db路径错误打印出来:SQL logic error or missing database no such table:XXX其中XXX是你加载的数据库文件的表名。博主在开发时,出错的原因是,加载的数据库文件名称错了,拷贝的是demo工程,文件名没改过来。参数名称太长错误打印出来:Insufficient parameters supplied to the command参考【2】,将@后的参数名改短就OK了。参考【1】SQL logic error or missi原创 2020-11-30 23:13:53 · 1154 阅读 · 0 评论 -
【C#学习笔记】SqLite实战
在实际项目中,遇到存储大量数据的开发场景,首先想到的是将数据存文本文件,这样最直接最方便,但是不好管理,且“通用性”不佳,数据量过大,还不方便查询。也尝试写成.csv格式的文件,后续还需要通过Excel等软件进行分类处理,也不是很理想。于是,尝试采用数据库进行数据存储和管理。首次,使用数据库,做份笔记防止遗忘,方便查阅。如果对阅读的各位小伙伴,有帮助,欢迎一键三连!:)原创 2020-11-22 21:39:22 · 1499 阅读 · 10 评论 -
【C#学习笔记】静态变量和静态方法的作用理解
静态变量静态方法参考资料:【1】C#中静态变量和 静态方法的作用原创 2020-11-13 21:45:24 · 562 阅读 · 0 评论 -
C# 委托 —— 从概念到理解到应用
目录1. 概念1.1 了解委托(delegate)1.2 理解委托2. 委托的使用3. 委托的应用3.1 从窗体-->主窗体的通信主窗体code从窗体code3.1 主窗体-->从窗体的通信3.1.1 主窗体code3.1.2 从窗体code4. 扩展5. 参考资料1. 概念1.1 了解委托(delegate)1、委托是一种全新的面向对象语言特性,运行在.NET平台2、基于委托,开发事件驱动程序变得非常简单3、使用委托可以大大简化多线程的难度1.2 理解委托1、委托,也可以看成原创 2020-11-05 18:22:29 · 816 阅读 · 0 评论 -
【C#学习笔记】如何加载当前文件夹下的某特定后缀名文件?
如何加载当前文件夹下的某特定后缀名文件?/// <summary>/// 找到当前路径下文件扩展名相同的文件/// </summary>/// <param name="path">路径</param>/// <param name="ext">扩展名</param>/// <returns></returns>private string GetFileFullPath(string path,原创 2020-11-05 15:42:47 · 540 阅读 · 0 评论 -
【C#学习笔记】Visual Studio常用快捷键
Visual Studio常用快捷键多行屏蔽先按Ctrl+K再按Ctrl+C多行取消屏蔽先按Ctrl+K再按Ctrl+U原创 2020-11-03 15:01:59 · 459 阅读 · 0 评论 -
【C#学习笔记】如何做一个文件加载的界面?
如何做一个文件加载的界面?代码: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;using System.IO;names原创 2020-11-03 14:52:10 · 535 阅读 · 0 评论 -
【C#学习笔记】如何判断一个字符串中是否包含某个字符串?
如何判断一个字符串中是否包含某个字符串?//因为使用了Regex,记得引用:using System.Text.RegularExpressions;//@input:想要查询匹配的断字符串//@source:用于查询的长的字符串private bool Char_Match(string input, string source){ bool result = false; Regex r = new Regex(input); Match m = r.Match原创 2020-11-03 14:29:40 · 2525 阅读 · 0 评论 -
【C#学习笔记】委托的应用
目录1. 委托概述2. 微软官方代码学习1. 委托概述委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托实例调用方法。2. 微软官方代码学习一个控制台程序,运行结果是:打印出所有平装书的书名,并计算出所有平装书书价的平均值。// A set of classes for handling a bookstore:namespace Bookstore{ using Syst原创 2020-10-15 16:22:22 · 313 阅读 · 0 评论 -
【C#学习笔记】获取当前程序目录
DirectoryInfo info = new DirectoryInfo(Application.StartupPath);String spath = info.Parent.Parent.Parent.FullName;TrhaConst.sAppPath = Application.StartupPath;原创 2020-10-09 10:49:43 · 184 阅读 · 0 评论 -
C#中setting.settings无法打开编辑界面解决办法
如果双击项目中的Settings.settings,显示:则解决办法如下:右击Settings.settings,选择打开方式;选择设置设计器,并设为默认值;设置完成后,出现编辑界面:在该编辑界面中,可以编辑需要修改的参数。...原创 2020-09-23 13:08:32 · 938 阅读 · 1 评论 -
C#一个带系统时间的Listbox应用方法
直接上代码:public void IncludeTextMessage(string strMsg){ string currenttime = DateTime.Now.ToString();//获取系统当前时间 InformationListBox.Items.Add(currenttime + " : " + strMsg); try { InformationListBox.SelectedIndex = InformationListBox.原创 2020-09-22 13:29:50 · 570 阅读 · 0 评论