
c#
文章平均质量分 74
相关c#代码操作的知识点集合
Yyuanyuxin
可关注公众号“毛线杂货铺”或淘bao店铺ID:122344852,订阅文章或技术更优惠
展开
-
c#-DataGridView控件实现分页
有时候我们需要进行分页显示,第一方面是在大数据量下可以降低卡顿,另一方面也是方便查找。首先划重点,如果卡顿,不要用单元格填充的方式去刷新,用绑定数据源的方式比较高效!下面重点讲如何使用数据源绑定数据的方式,对数据进行分页展示。本文中配合使用了BindingNavigator控件,该控件有很多功能,因为开发时间比较紧急,下文中仅使用该控件进行按钮的替代。原创 2024-08-23 16:26:38 · 1744 阅读 · 0 评论 -
c#有关TCP和UDP通信的简单粗暴答疑
近期由于工作需要,对TCP和UDP通信都有涉及,在不断踩坑和学习探索中,也有了一些粗微的领悟,写出来和大家分享讨论。有关TCP的帮助类,后期再写一篇文章。ps:本文只是简单粗暴不使用专用术语来解决一些简单的疑问,具体有兴趣可自行深入学习。1.有关分包先把总结放上:UDP.会自动分包,如果一个数据包超过1472,则分多次触发接收事件,每次最多传递1472个字节。tcp无需拼包,会一次性传递过来,但是数据包越大,触发接收事件所需的时间更多。具体缘由可查看如下两个网址:https://blog.c原创 2022-04-07 16:07:58 · 2747 阅读 · 0 评论 -
c#导入地图(一)--地图Gmap的使用
前期准备工作下载GMap及离线地图内容包含GMap源码以及地图下载器(用于生成GMDB格式离线地图文件)下载地址:https://archive.codeplex.com/?p=greatmaps(地址无法找到),我翻资源找到了(链接:https://pan.baidu.com/s/1AFGzkobdj_cIBfEYtC1lQA?pwd=bbj0提取码:bbj0)或者私信告诉我邮箱,给你们发。打开工程:VS打开报警告没关系,直接继续运行软件:找到合适的地图,很多地图是无法显示的,我用的原创 2022-03-28 14:12:20 · 7644 阅读 · 21 评论 -
c#禁止同时打开两个相同的程序
有时候运行可通信软件时,如果打开两个软件,通信有可能会造成混乱,为了避免这样的情况,我们可以在启动软件前先检测是否打开了软件,若打开,则弹出提示并关闭。代码块: Process[] pro = Process.GetProcessesByName("CarParkInspectApp"); if (pro == null || pro.Length >= 2) { MessageBox.Show("软件已打开,请勿重复原创 2021-07-23 16:23:52 · 1161 阅读 · 0 评论 -
c#实现Udp通信(四)--UPD大数据量接收(异步接收)
之前困恼了很久的问题,终于解决了,项目要求使用Upd传输,128000的采样率 ,每次一个通道2000个数据,一个数据用3个字节传输,共8通道,最后两字节验证码,最后计算转成double值,用曲线显示并保存文件。则:128000/2000=62(次)1/62≈0.016(s)=16(ms)200038+2=48002(字节)相当于循环16ms传输48002个字节。在之前的项目中,没有解决,让c++的同事写的插件,空闲时还是要自己研究下哈,但是资料真的好难找,最后自己摸索,实现了,下面把帮助类贴原创 2021-04-27 17:36:35 · 10187 阅读 · 5 评论 -
c# --WPF学习之路(四)-把后台的c#代码放置到XAML文件中
使用x:Code代码:<Grid> <Button x:Name="b1" Click="a_click"></Grid><x:Code> <![CDATA[ private void a_click(object sender,RoutedEventArgs e) { MessageBox.Show("he!"); } ]]></x:Code>原创 2021-04-16 17:42:36 · 524 阅读 · 0 评论 -
c# --WPF学习之路(三)XAML如何为对象属性赋值
如果我们想存一些静态属性在页面上的时候,我们可以使用如下的方式,在描述之后添加Resources属性上图的代码解释来说,就是创建了一个TestClass类实例,他的实例名为human ,给他的TestClass1属性赋值“Abc1”,text属性赋值为"Abc"。下面我们来看TestClass类:public class TestClass { public string Name{ get;set; } public string text { get;原创 2021-04-16 13:44:14 · 1148 阅读 · 0 评论 -
c#-解决窗体加载时的闪烁问题
针对启动页面直接添加背景图片,启动软件时会先闪烁一下才能正常显示的问题,可用下面的方案界面1.开启双缓存开启窗体的双缓存属性2.在构造函数里添加以下代码SetStyle (ControlStyles.AllPaintingInWmPaint //全部在窗口绘制消息中绘图 | ControlStyles.OptimizedDoubleBuffer //使用双缓冲 , true);如图:3.添加CreateParams方法,重写protected override Creat原创 2021-03-18 18:02:56 · 1853 阅读 · 1 评论 -
c#-winform自定义窗体皮肤(无边框皮肤)
winform开发的时候,因为自身窗体都是window窗体风格,可操作性不大,往往不能根据UI提供的方案进行界面的还原。因此会采用封装的窗体作为继承窗体,将所有界面统一风格并避免代码重写。当然,如果需要实现很漂亮的界面,还是建议wpf或者Unity或其他方式实现,winform的控件有一定的局限性,有时候UI设计的按钮或者其他控件达不到效果,可能需要控件重绘来解决,相对来说不是那么友好。如下图所示的深灰风格,实现之后,可以直接像Form类一样使用。...原创 2021-03-17 15:35:00 · 3116 阅读 · 0 评论 -
c#有关各类键盘检测事件无法触发的解决办法(KeyDown)
因为.net有自带处理的键盘上下左右按键事件,即可以移动控件焦点,所以导致我们想使用上下左右按键触发KeyDown是不可用的。为此只需要重写ProcessDialogKey事件即可: protected override bool ProcessDialogKey(Keys keyData){ if (keyData == Keys.Up || keyData == Keys.Down) return false;//是上下方向键则不处理,交给KeyDown事件 ret原创 2020-12-23 15:06:37 · 4450 阅读 · 2 评论 -
c#--文件读写、删除及追加内容的几种方法
目录简单string的读写1.写入:2.读内容:3.追加内容:4.修改某一行并追加内容二进制读写:1.读2.写文件删除简单string的读写1.写入:StreamWriter sw = File.AppendText(txtPath); //保存到指定路径sw.Write(txt);sw.Flush();sw.Close();2.读内容: string strContent = File.ReadAllText(path);3.追加内容:无文件会自动生成文件using (FileS原创 2020-12-02 16:30:04 · 5145 阅读 · 0 评论 -
C#--DataGridView的使用
目录添加行号:添加一行数据:绑定数据源:设置列名:导出表格数据为Excel或Txt问题汇总:添加行号:private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e){ if(dataGridView1.Rows.Count>1) e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index +原创 2020-11-26 17:33:30 · 5716 阅读 · 0 评论 -
c#实现Udp通信(三)--遇到的问题归纳
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元).但这并不是指链路层的长度被限制在1500字节,其实这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节.所以,事实上,这个1500字节就是网络层IP数据报的长度限制.因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节.而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的.又因为UDP数据原创 2020-11-17 08:57:29 · 1000 阅读 · 0 评论 -
C#实现Upd通信(二)--socket通信配合订阅者模式广播及收发信息
上一节讲的是简单的socket通信,为了提高复用率,整理为一个帮助类,并加入订阅者模式(想要接受通知的类或者界面只要注册了该类,则无需通过一层层传递的方式传递数据,具体下次写一篇具体说明),方便本机电脑广播的方式发生信息给多台用户,并在多个界面能够接到远程设备返回的数据。帮助类代码:private static SocketHelper instants;public static SocketHelper Instants{ get { if (instants =原创 2020-10-23 16:21:15 · 1016 阅读 · 0 评论 -
C#实现Upd通信(一)--最简单的socket通信
工作需要用到UPD和设备通信,于是又开始学习这块的知识,首先,学习一个简单的入门程序。界面如下:先初始化后,可以给本机发送信息,随时接收初始化:Socket server;public void InitSocket(){ server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); server.Bind(new IPEndPoint(IPAddress.Parse(t原创 2020-10-20 17:56:32 · 1400 阅读 · 0 评论 -
c# --WPF学习之路(二)简单认识Grid及GridSplitter控件
Grid类似于winform中的Panel,和GridSplitter一起使用,就有点像winform的SplitContainer和TableLayoutPanel。初始添加的窗体文件,选择Grid控件(默认存在的),在属性框点击:点击两次添加后,出现上面的两个项,我们理解为一个项为一个Panel。点击确定后,可以看到窗体出现一个横线,将界面分成两个方框。如果要竖向分割,选择如下属性,一样的设置:添加完成之后,如果想要可以使用时移动每个方框的大小。使用GridSplitter可达到效果原创 2020-10-09 10:04:31 · 2179 阅读 · 0 评论 -
c# --WPF学习之路(一)
一直都是用Winform做桌面应用程序开发,听说WPF用起来比winform开发简单,更加灵活,做出来的界面可以更加美观,所以试试看,一起学习起来~~~目录1.简单认识WPF项目组成2.XAML语言简单介绍3.简单看懂XAMLxmlns-特征的语法格式x:Class4.窗体属性1.简单认识WPF项目组成新建工程:生成的项目由下几个部分组成:App.xaml代码MainWindow.xaml代码由上面可以看出,基本界面由XAML语言组成。ps:我使用的版本是VS2019,其他版本可能有原创 2020-09-29 15:49:15 · 8027 阅读 · 0 评论 -
c#--导出excel或txt文件
使用:List<string> columns = new List<string> {"时间","设备编号","计数器","线号","点号"};var name= DateTime.Now.ToString("yyyy-MM-dd HH mm ss") + " " + cb_type.Text + " " + cb_wave.Text + " " + cb_fre.Text;SaveFileDialog saveFileDialog = new SaveFileDialog(原创 2020-09-28 10:23:29 · 1280 阅读 · 0 评论 -
c# 色阶文件的读取及渐变色绘制
文件原创 2020-09-18 11:22:16 · 2373 阅读 · 0 评论 -
c#tchart的使用
目录x轴设置为指定时间格式,且设置最小间隔时间鼠标滚轮控制缩放点击数据点显示曲线信息调出图片导出保存界面绑定数据源并生成曲线x轴设置为指定时间格式,且设置最小间隔时间鼠标滚轮控制缩放添加滚轮事件 tChart1.MouseWheel += TChart1_MouseWheel;private void TChart1_MouseWheel(object sender, MouseEventArgs e){ if (tChart1 != null) { v原创 2020-09-04 17:10:14 · 2885 阅读 · 0 评论 -
C#Winform中的ToolTip
目录1.显示标签2.隐藏3.重绘4.显示内容不对的问题1.显示标签在需要显示的地方(一般是需要显示的控件鼠标进入控件的事件里面,放初始化无效)Form form = FindForm();toolTip1.Show("需要显示的文字", form, form.PointToClient(Cursor.Position));2.隐藏 toolTip1.Hide(superGridControl1);//superGridControl1这个是在表格上的标注(一般放在控件鼠标离开控件的事件里面)原创 2020-09-03 10:19:46 · 6077 阅读 · 1 评论 -
c#串口通信(四)--串口数据丢失或分段原因及串口事件的说明
最近在软件调试中,发现数据一长就经常丢失数据,所以耐下心了解了一些原理,用较为简单的理解方式记录下来。题外话:一般来说,半双工通信需要添加一个超时时间,当超过这个时间后,就判定接收失败了,之前的缓存数据也要清空。个人选择定时器的方式,至于如何计算超时,公式如下:数据所需时常=总数据长度10/波特率。对于我的数据,最长为1237字节,波特率选择9600,则需要耗时123710/9600=1.28854…,基本为1.3秒,所以我设置了串口的超时时间为3秒。发送后如果3秒没接收到数据,就算超时,直接发下原创 2020-08-19 13:50:52 · 14707 阅读 · 5 评论 -
C# 有关不卡界面的延时遇到的问题
延时一般来说会使用thread.sleep()的方式,但是这样的方式,会导致界面也卡顿在网上找到另一种方式: public static void Delay(int mm) { DateTime current = DateTime.Now; while (current.AddMilliseconds(mm) > DateTime.Now) { Application.DoE原创 2020-08-19 11:09:08 · 1732 阅读 · 1 评论 -
c# winform窗口启动时隐藏
如果想窗体完全不显示,可以设置属性隐藏窗口用的是this.Hide();,但是在主窗口构造函数里使用并不生效。最后发现必须在Load事件里隐藏。private void Form_show_Load(object sender, EventArgs e){ this.BeginInvoke(new Action(() => { this.Hide(); this.Opacity = 1; }));}...原创 2020-06-18 11:07:08 · 3274 阅读 · 0 评论 -
C#--主程序启动EXE插件,并使用SendMessage进行进程间通信
[DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam); [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern int Fi原创 2020-06-17 09:07:44 · 1923 阅读 · 0 评论 -
Windows常用消息大全
表A-1 Windows消息分布消息范围说 明0 ~ WM_USER – 1系统消息WM_USER ~ 0x7FFF自定义窗口类整数消息WM_APP ~ 0xBFFF应用程序自定义消息0xC000 ~ 0xFFFF应用程序字符串消息> 0xFFFF为以后系统应用保留表A-2 常用Windows消息消息名称...转载 2020-06-15 17:33:39 · 361 阅读 · 0 评论 -
c#--无线通信,实现简单有人透传云通信
学习文档:http://cloud.usr.cn/Public/sdk/dll/#USR-Init-%E5%88%9D%E5%A7%8B%E5%8C%96%E6%8E%A5%E5%8F%A3学习过串口通信后,在连线不方便或者距离比较远的使用场景,会用到4G模块。本文使用的是有人物联网旗下的4G透传模块(新版本) WH目录1.配置有人透传云管理系统2.在VS项目上连接云关系系统(1)连接云管理系统:(2)断开云管理系统:(3)订阅设备:(4)与设备通信:3.完整代码例子:1.配置有人透传云管理系统一原创 2020-06-10 16:55:56 · 2767 阅读 · 0 评论 -
c# 多线程中将函数作为方法传递(多串口并发,单串口保证一发一收机制)
一.首先简单说明多线程。1.不带参数且无返回值。public void show(){ MessageBox.Show("ss");} Thread thread = new Thread(new ThreadStart(show)); thread.Start();2.带一个参数且无返回值。public void SendGain(float gain){ RS485Helper.SetGain(this, gain);}使用的时候: Thread threa原创 2020-06-09 11:48:07 · 2265 阅读 · 0 评论 -
c#串口通信(三)--半双工通信的数据接收
上文提到了如何简单发送和接收串口数据。在实际操作中,对于半双工通信(一问一答),如果需要一次发送多个指令,用DataReceived事件判断是否接收完毕,再发送下一条数据,不是很好的选择。个人采用如下的方式,总的来说就是发送指令之后,用循环判断是否完成接收,未完成就延时一段时间再去判断,直到接收完成后再执行下一条指令:先写好单条一问一答的函数:有关接收事件GetCallbackData()代码如下:private byte[] DataBuffer = new byte[1000];priva原创 2020-05-19 16:45:33 · 2816 阅读 · 0 评论 -
SQLite查询报错--该字符串未被识别为有效的 DateTime 错误
数据库数据正常,同样的查询语句,在sqlite的可视化工具中查询不报错,但是在VS中查询的时候,报该字符串未被识别为有效的 DateTime 错误。解决方案,在保存到数据库的时候,处理时间:时间.ToString("s")则数据库显示为:再去查询不报错。...原创 2020-05-19 16:14:32 · 1055 阅读 · 0 评论 -
c#有关多线程导致的常见问题--从不是创建控件的线程访问、不能调用invoke
System.InvalidOperationException:“在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”原创 2020-05-19 15:43:01 · 829 阅读 · 0 评论 -
c#串口通信(二)--通信协议的发送及数据解析
在简单的认识及使用串口通信之后,在实际应用中应该是配合硬件,和负责硬件通信的同事沟通好通信协议,来进行设备的控制及数据获取。常用的串行通信协议有TTL电平(普通MCU芯片输出的串口电平)、RS232(工业上常用的串口标准)及RS485(串行总线标准,常用语通信距离为几十米到上千米时)等。本文采用的是RS485,为半双工工作方式。下面是一个简单的获取设备信息的例子。通信协议如下:数据包格式:包头(2byte)命令码(1byte)包长(2byte)数据/状态(Nbyte)异或校验(1b原创 2020-05-11 16:43:56 · 10879 阅读 · 8 评论 -
c#串口通信初接触
1.什么是串口及串口通信?串口全称串行接口,是采用串行通信方式的扩展接口。通俗的来说,例如我们电脑等设备用的USB接口类似,串口功能类似USB,都是用于数据传输的工具,也是一种非常通用的设备通信协议。串口通信就是计算机和外设之间通过数据线相连按位传输数据,通过向串口发送的电信号可以控制终端器械以及设备。比如我们用电脑给单片机发送指令,就是USB转串口来控制单片机的方式。如何理解串口,UA...原创 2020-04-29 15:00:07 · 936 阅读 · 0 评论 -
DataGridView数据源更换或刷新时,表格内容不显示或者不变
之前遇到这样的问题,查看历史数据的时候绑定了datatable1。之后改为实时数据显示,则将datatable1的数据情况,重新存入,但是DataGridView就不自动更新。解决方案如下:_totalTable = bll.GetSingelInfo(InitSystemStaticInfo.CurProject?.TableName);//重新获取数据dataGridView1.Dat...原创 2020-04-26 15:43:24 · 8410 阅读 · 1 评论 -
VS自带Chart控件——设置x轴为时间,并使用滚动条显示
效果:全部例子代码:https://download.youkuaiyun.com/download/Yyuanyuxin/123475711.初始化设置:/*###############################################################################//ps:尤其注意,下面的语句有的打断顺序会出现不同的效果····之前踩了好多雷·...原创 2020-04-21 16:30:38 · 13605 阅读 · 4 评论 -
c#winform打开特定网址
主要是这个代码://调用系统默认的浏览器 System.Diagnostics.Process.Start("https://blog.youkuaiyun.com/testcs_dn/article/details/42246969");但是有几个不同的使用:上面的代码还可以写为: System.Diagnostics.Process.Start("explorer.exe", "https:/...原创 2020-04-17 14:15:07 · 490 阅读 · 0 评论 -
如何在winform打包时带上sqlite数据库
sqlite数据库下载及使用:https://blog.youkuaiyun.com/Yyuanyuxin/article/details/105508886sqlite数据库可视化工具—— DB.Browser安装说明:https://blog.youkuaiyun.com/Yyuanyuxin/article/details/105513276有关c#_VS2019 项目打包(不带数据库)https://b...原创 2020-04-15 18:01:03 · 6030 阅读 · 2 评论 -
c#--文件及文件夹相关操作
目录1.判断存在判断文件存在:2.打开打开指定路径对应文件夹3.创建创建文件夹4.写入文件1.判断存在判断文件存在:if (!Directory.Exists(projectPath)) return;判断文件夹存在:if (!Directory.Exists(projectPath)) return;2.打开打开指定路径对应文件夹 if (!Directory.Exists...原创 2020-04-09 13:35:39 · 257 阅读 · 0 评论 -
c#_VS2019 项目打包最新笔记
**## 1.安装打包插件2.需要打包的项目上添加新工程,选择setup3.设置打包启动项目三个文件夹说明如下:Application Folder:应用程序包含的文件设置,指最终在客户电脑上的安装根目录User’s Desktop:用户桌面快捷方式设置,用户桌面,一般放个快捷图标。User’s Programs Menu:用户启动菜单的快捷方式设置,一般也是放快捷图标。PS...原创 2020-04-08 14:22:32 · 4559 阅读 · 12 评论 -
c#winform之TextBox
目录控制密码显示:在输完用户后回车直接转移焦点(适用不只是该控件)只允许输入数字控制密码显示:代码部分: private void cb_showPassword_CheckedChanged(object sender, EventArgs e) { if (cb_showPassword.Checked) { tb_password.Passwo...原创 2020-04-08 09:24:38 · 1009 阅读 · 0 评论