WPF学习记录
人最好的状态就是销声匿迹 ,半隐半藏 ,自我沉淀
WPF基础学习 北のWPF学习记录
ButtonBase基类 Button按钮 ToggleButton基类
百天打卡
圣人以心束行 ,君子以行束心
TimeLine
2025-10-10 19:03
第02天打卡 ,逐渐明确了自己前进的方向 ,希望自己能坚持下来
2025-10-09 07:26
第01天打卡 ,今天早起起床学习 ,然后就上班去了 ,等黑咖啡到了的话我就开始准备早起锻炼了
读写本地ini文件
生成本地ini文件代码展示:
1234567891011121314/// <summary>/// 系统配置文件路径/// </summary>private string sysInfoPath = Application.StartupPath + "\\Sysinfo.ini";/// <summary>/// 系统配置文件服务类/// </summary>private SysInfoService sysInfoService = new SysInfoService();public FrmMain(){ InitializeComponent(); sysInfoService.SetSysInfoToPath(new SysInfo() , sysInfoPath);}
不难发现 ,通信参数少了一个 ,应该是四个的 ,原因:IP地址是字符串
解决方案:写入一个默认的字符串
这里就正常了
读取ini信息笑死 ,自己粗心大意 ,断点打错地方了 ,使劲排查错误 ,真 ...
Winform无边框窗体拖动功能实现
1. 设置无边框模式选中要去除边框的窗体,按F4调出其属性面板,在属性面板中找到 FormBorderStyle ,并选择 None,即可将窗体设置成无边框模式;默认是无法随意拖动的,也没有最大化最小化关闭按钮。
2. 通过Panel控件实现窗体移动实现方法 :在窗体的头部添加 Panel 控件,通过 Panel 的 MouseDown、MouseMove 事件实现窗体移动;(这里的话可以添加一个背景色更好)
实现原理: 直接通过修改窗体位置从而达到移动窗体的效果;
代码实现:
1234567891011121314151617181920212223//定义一个位置信息Point用于存储鼠标位置private Point mpoint;/// <summary>/// 鼠标移动事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void pane ...
DataGridView表格控件使用说明
可以添加和编辑列
设置头部
设置列的样子:
设置高度 ,需要多个属性配合使用
完全居中 ,每个列都需要进行设置
效果展示:
数据绑定先设置属性123456public class SysAlarm{ public string AlarmTime { get; set; } public string AlarmInfo { get; set; } public string Operator { get; set; }}
初始化绑定这个需要在FrmMain 方法里面去进行添加
12345678910111213141516171819202122// 初始化绑定List<SysAlarm> alarmList = new List<SysAlarm> ();alarmList.Add(new SysAlarm(){ AlarmTime = DateTime.Now.ToString(), AlarmInfo = "系统报警信 ...
WinForm 计时器 Timer 学习笔记
1. Timer 是干啥的?就是个“自动闹钟”:你设定每隔多少毫秒(比如 1000 毫秒 = 1 秒),它就自动执行一段代码。
常见用途:
实时显示时间
倒计时
定时刷新数据
轮询状态
2. 怎么用?三步搞定(WinForm 拖控件方式)第一步:拖一个 Timer 到窗体
打开设计器
工具箱 → 找到 Timer(在“组件”里)
拖到窗体上 → 它不会出现在界面上,而是在窗体底部显示为 timer1
第二步:设置两个关键属性选中底部的 timer1,在属性窗口里改:
属性
值
说明
Interval
1000
每隔多少毫秒触发一次(1000 = 1秒)
Enabled
True
必须设为 True! 否则 Timer 是“关着的”,不会跑
⚠️ 默认 Enabled = False!这是大多数人写了代码却不生效的原因!
第三步:写要执行的代码
双击底部的 timer1
Visual Studio 会自动生成 timer1_Tick 方法
在里面写你要定时干的事,比如:
1234private void timer1_Tick(ob ...
多状态循环泵控件开发
所遇问题描述:在使用定时器设置泵的运行状态时 ,可以成功运行 ,但是会一卡一卡的
这里猜测的是定时器时间设置过短导致它本身一个周期还未运行完成就重新开启下一轮的运行
但是将时间设置大了之后 ,结果并不是这样子的 ,还是会出现一卡一卡的状态
解决办法对其进行一个变化更新 ,也就是拿它的当前值与上次值去进行一个对比 ,如果不一样 ,就说明值发生了 ,这个时候再去进行一个更新
代码展示:
123456private void updateTimer_Tick(object sender, EventArgs e){ // 模拟从PLC读取一个泵的状态数据 bool state = true; this.pump1.PumpState = state ? NorthControLib.PumpState.运行 : NorthControLib.PumpState.停止;}
123456789101112131415161718192021222324252627282930[Browsable(true)] // 是否显示属性[Category( ...
使用100%缩放比例重新启动Visual Studio 界面模糊的解决方案
问题描述建议:如果是刚开始写WinForm项目 ,建议刚开始就去进行一个替换 ,要不然后面会很麻烦的 ,不仅要计算size 还要去 计算 location 的值
昨天碰到了这个问题 ,当时设置完之后界面就非常的模糊 ,虽然说界面变大了 ,但是看着异常难受 ,很模糊
解决方案
新建应用程序清单文件(Application Manifest File) , 保持默认名称 app.manifest,点击添加。
找到这段代码:
12345<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings></application>
替换DPI相关配置:
12345678& ...
对象初始化器的使用方法
1. 什么是对象初始化器?对象初始化器就是一种在创建对象的同时,直接给属性赋值的写法。不用先 new 一个对象,再一行一行地赋值。
它的作用是用来给对象初始化的
一定存在:必然要执行构造方法
2. 构造方法与对象初始化器有什么区别
3. 传统写法 vs 初始化器写法传统写法(啰嗦):1234var person = new Person();person.Name = "张三";person.Age = 25;person.City = "北京";
4. 初始化器写法(简洁):123456var person = new Person{ Name = "张三", Age = 25, City = "北京"};
看出来没?就是把赋值操作直接塞到 new 语句里,用大括号 {} 包起来。
4. 基本规则
属性必须是 public 的(或者有 public 的 set 访问器)
用逗号分隔各个属性赋值
最后一条不用加分号(但加了也不报错)
不需要调 ...
Nuget安装以及西门子PLC通信
安装S7NetPlus库
添加命名空间 ,using S7.Net
创建一个西门子PLC通信对象——成员变量
实例化 ,this:表示的是当前对象
建立简介 ,对象名.方法名 , this.siemens.Open()
读取变量 , 装箱的一个过程 ,
解析变量 ,拆箱的一个过程
代码演示:
12345678910111213141516171819202122232425262728293031// 声明一个私有的 Siemens S7 PLC 通信对象,初始值为 null// 使用 S7NetPlus 库中的 Plc 类来实现与西门子 PLC 的通信private Plc siemens = null;// 定义一个名为 S7Test 的公共方法,用于测试与西门子 PLC 的连接和数据读取public void S7Test(){ // 创建一个新的 Plc 实例,指定 CPU 类型为 S7-1500 // 参数说明: // CpuType.S71500: 指定 PLC 的 CPU 类型为 S7-1500 // ...
九月份学习记录
学习目标:每天至少学习15节课
2025-09-21今天的话差不多就是学习了一些语法基础和数据的一些基本类型 ,再次学习的话我自己也确实收获颇丰 ,对于WinForm的理解也更加深了一些 ,希望自己能够坚持住吧 ,其实我自己也明白 ,应该多去学习一下编程之外的知识的 ,等后面有机会也去慢慢的给学习了
WinForm引入项目资源文件
以Buttom按钮为例去引入 ,在Debug文件目录下 , 新建一个images文件夹 ,然后把要使用的资源(图片)拖进去
将资源加载到项目中去 ,点击 Properties下面的Resoures.resx , 然后把图片直接拖进去 效果如下:
这个时候就可以去进行一个使用了
使用方式:this.pic_Pump.Image = Properties.Resources.PumpStop; , 主要的是这个Properties.Resources.引入的资源
思源笔记同步记录
新建空间 ,设置存储空间名称 ,访问控制设为私有
在思源笔记设置中 ,云端选项中选择S3存储 ,填写相关配置
Endpoint:就是 S3协议的外网访问地址 去掉空间名称,http://s3.cn-south-1.qiniucs.com
Access Key:七牛云 - 密钥管理 的 AK 值
Secret Key:七牛云 - 密钥管理 的 SK 值
Bucket:在七牛云创建的空间名称,比如我的就是 siyun-date
Region:填写域名中显示的区域名字,即 cn-south-1
Timeout (s)、Addressing、保持默认就行(前面两项) ,TLS Verify 选择:Verify
选择云端同步 ,同步冲突时生成冲突文档
云端同步模式:手动同步
设置快捷键 —> ctrl + S
思源笔记现用代码片段记录
使用主题:VSCode Lite Edit
代码片段记录左上方状态栏颜色1234:root[data-theme-mode=dark] { --mk-toolbar-item--active: #3c3c3c !important; --mk-toolbar-item-barWorkspace--hover: #3c3c3c !important;}
底部菜单栏颜色12345678910.status { background-color: #3C3C3C;}.status * { color: #Dadada; font-size: 14px; font-weight: 600; font-family: 'Cascadia Mono', 'Cascadia Code', 'Microsoft YaHei UI', var(--b3-font-family);}
虚线备注12345/* 虚线备注 CSS片段 https: ...