2023-05-18 11:07:15
勇哥注:C# 在解决方案管理器中双击winform,打开设计器的等待时间超长。。。有时候甚至要等十几分钟这么夸张。。。另外,如果你使用vs2022打开相同的工程,发现打开winfom的速度就变得飞快了!但是用vs2015, vs2017都一样慢。经过勇哥长时间的摸索,此问题的原因是:首先,你的这些winfrom数量多并不是原因。而是因为你的某些winform可能存在控件数量太大。注意,即使当前你...
2023-04-09 21:57:07
勇哥注:这个问题勇哥在网上找了许久。假设A、B单元格都是下拉DataGridViewComboBoxColumn。我想A单元格选中一个内容,B单元格进行刷新列表。如果是DataGridView默认设置下,你会发现:CellEndEdit、CellClick、CellMouseDown、CellMouseUp这些都做不到完美的效果。最多是能做到点A后,然后点击一下B单元格,才能看到刷新效果。本文主题...
2023-03-31 14:39:17
让datagridview的DataGridviewComboBoxColumn即可以下拉,还可以输入内容这个需求是有必要的。勇哥参考了一些网上的资料,证明winform还是可以实现此功能的。虽然操作上有点不太方便,比如输入内容后回车不能结束编辑,需要点内外的单元格结束编辑。但是好歹是实现的要求,而且不用重写一些方法。效果如下:演示代码: public partial class Form1 :...
2023-03-26 16:26:25
勇哥注:去除List的重复元素的问题是比较常见的需求,C#有标准的做法,以后不要自己写了。 public class Student
{
public string Name { get; private set; }
public int Id { get; private set; }
public string Hobby...
2023-03-24 09:32:41
勇哥注:此控件是继承TreeView控件重写的用户组件,主要特点是可以在节点文本右边添加按钮。按钮本身就是一个Button类,可以设置按钮的显示相关的属性,以及事件等。此控件可以方便提供IO、气缸、轴的测试功能,不用双击弹出另一个窗口做这些事。有效的提升了用户体验。使用方法说明:(1)此控件带一个WpfTreeHelper类,以方便操作控件(2)初始化树时,无论是根结点,还是子节点,都使用AddN...
2023-03-24 08:16:35
这个问题浪费了勇哥一个小时的时间。即你在NodeMouseClick、Click事件中获取SelectedNode,有可能为null或者上一次的节点。希望实现点击TreeView控件下的不同子节点,显示其对应的内容。但发现在TreeView控件的MouseNodeClick事件中利用(TreeView)sender).SelectedNode.Name获得子节点的Name与实际点击的子节点并不一致...
2023-03-23 09:59:48
vs团队管理器的git功能中,当本地文件和远程文件有差异的时候。我们可以选择“比较文件”然后就弹出差异比较功能。其中左边是远程的,右边是本地的。但问题是,如何把左边的差异部分推到右边去呢? 或者如何把右边的差异推送到左边去呢?勇哥用过文件比较Beyond Compare这个软件,它是可以左右互推功能的。但是“文件比较”找不到类似的功能。如果使用ctrl+c, ctrl+v 也是没有效果的。难道“...
2023-03-16 09:07:45
勇哥注:IComparable 接口常用于排序。比如可以用于List<T>.Sort()方法,对T是自定义的类型的数据结构做排序。如果T是值类型,则有内建排序规则,不需要特殊处理。只是对T是你自定义的数据类型时,需要把这个数据类型继承IComparable 接口,然后实现接口(即自定义的排序规则代码)举个栗子:下面的数据结构StageDatastruct,已经继承的IComparabl...
2023-03-13 17:23:44
这篇文章是关于.Net的反射优化(有效率地使用反射)的技术。文中有翻译不准确、难以理解的内容可在评论出指点或咨询。概述反射(Reflection)是一种非常强大的.Net平台的特性。System.Reflection命名空间下提供了一套丰富的加载和调用程序集和对象的接口,除此之外它还提供了 了运行时动态地检索元数据信息的方法,比如获取属性、字段信息,特性信息等。使用反射确实可以使开发人员的生活变得...
2023-03-08 21:24:38
2D测量之一通过2D测量可以获取一些特征,如• 物体的范围,也就是说组成物体的像素数组• 物体的方向• 物体间或者物体组成部分间的角度• 物体的位置• 物体的尺寸 ,也就是说他的宽度高度或者物体间的距离,物体组成部分间的距离• 物体的个数分析measure_metal_part_first_example.hdev例程第一步:创建区域并提取基础信息• 通过threshold算子提取感兴趣的区域•...
2023-03-08 09:34:26
明明安装有git,为啥VS的团队管理器提示说需要安装第三方git命令,如下图所示:如果点击安装,vs打开了浏览器,跳到了git的下载页。下载后,再次安装git,重新打开vs,结果依旧。这是什么鬼?网上说的下面的设置,也没问题。最后说结论,有问题的这个版本是vs2015,但后来勇哥发现同一台机器上有一个vs2019的版本,直接打开项目(已含有.git目录),观察右下角可以看到git功能是有了。所以结...
2023-03-05 08:43:59
勇哥注:我们知道C#的集合有两类普通集合泛型集合前者存在于 System.Collections 命名空间下,属类型不安全的,后者存在于 System.Collections.Generic 命名空间下,属类型安全的。不可变对象也就是本文说的只读对象, 定义为一旦创建就不可变更的对象, 在 .NET Core 中就存在着这三大不可变集合 IReadOnlyListIReadOnlyDictiona...
2023-02-28 14:40:41
勇哥注:今天突然发现强制类型转换和as还是有点区别的。比如下面这句会抛异常:其中SACItemRunStatusEnum是一个枚举。ItemRunStatus= (Tuple<SACItemRunStatusEnum, int>)data异常信息如下:无法将类型为
“System.Tuple`2[Samsun.Domain.MotionCard.Common.SACItemRunSt...
2023-02-24 15:04:21
勇哥注:群里有人介绍到这个FlexCell表格控件,突然发现它在腾讯的软件中心中有。突然就升起了敬意。因此试用一把吧。另外vb.net 开发的控件,还能拿出来商业出售,由于大家都知道的原因,这着实让人有点惊讶,这让我对C#的商业软件开发有了点底气。FlexCell表格控件 for .NET是采用VB.NET开发的表格/报表控件。官方介绍如下:FlexCell是一款简单易用的表格控件,提供了非常全面...
2023-02-24 14:37:16
勇哥注:C# 多线程调用单例类时的安全性问题是非常值得我们重视的,出现类似的问题会造成软件出现偶发问题,非常隐蔽。单例类造成的问题主要有两方面: 一是你的单例到底是不是单例? 二是你的单例是不是在被多线程调用。第一个问题请参考:C#实现单例模式的几种方法总结 http://www.skcircle.com/?id=1924 第二个问题请参考下面的说明:多个线程,同时调用单例的同一个方法会出现什么现...
2023-02-23 08:37:40
(六)串口无协议读写指令RXD、TXD有了串品读写,PLC就可以发信息给上位机,这样可以做许多有意思的事情,比如写个小游戏,可以让PLC做逻辑,上位机程序负责更新界面。RXD为读串口,TXD为写串口。下面的程序中,A526.01的作用如下:当通讯突然中断时,缓冲区内的数据一直保存,事实上,RXD指令并不负责清空缓冲区,换句话说,缓冲区内始终为接收的数据。所以,如果遇到这种问题,你可以执行A526....
2023-02-22 22:42:02
勇哥注:网上和B站上都讲得是勾选winxp sp3的兼容模式,但是在勇哥的win10电脑上面并没有卵用。经过研究,下面的方法可以安装。(1)管理员方式运行setup.exe可以从任务管理器看到无反应,内存也不增涨。(2)右键”转详细信息“(3)在进程Setup.exe上右键”分析待待链“(4)如下,勾选后”结束进程“反复做第4步,直到看到安装程序正常进行安装为止。勇哥这边大概结束了7,8个进程。搞...
2023-02-21 22:33:07
勇哥注:为了方便大家做面向对象的实践,特地收集了几个例子:“动物的运动会”、“计算器”、“养猪场的故事”。它们都有参考答案,见下载。这篇里勇哥只写出需求和知识点而不直接提供代码,以方便大家做编码练习。常见的设计原则:面向对向程序的三大特征:
封装,隐藏内部实现
继承,复用现有代码
多态,改写对象行为
设计模式的核心思想:
(1)设计模式最根本的意图是适应需求的变化。
(2)编码应采...
2023-02-21 19:23:50
本文提供了一些性能优化的建议,这些经验来自于使用托管代码重写C# 和 VB编译器,并以编写C# 编译器中的一些真实场景作为例子来展示这些优化经验。.NET 平台开发应用程序具有极高的生产力。.NET 平台上强大安全的编程语言以及丰富的类库,使得开发应用变得卓有成效。但是能力越大责任越大。我们应该使用.NET框架的强大能力,但同时如果我们需要处理大量的数据比如文件或者数据库也需要准备对我们的代码进行...
2023-02-20 23:33:23
1、 IComparable接口IComparable接口定义通用的比较方法。由类型使用的IComparable接口提供了一种比较多个对象的标准方式。如果一个类要实现与其它对象的比较,则必须实现IComparable接口。由可以排序的类型,例如值类型实现以创建适合排序等目的类型特定的比较方法。2、 IComparer接口是特定用于Array的Sort和BinarySearch方法,通过实现ICo...
2023-02-20 11:19:41
勇哥注:这个系列的贴子主要是为了培训用(专职自动化设备的C#软件工程师),因此例子的知识范围被限制在行业范围内。C#基础知识在网上是最多的存在,不足主要下面几点:1. 内容零碎,没有大纲来组织2. 什么功能都有讲,就是没有按实际项目的常用程度来组织3. PLC转上位机的人员,很难把PLC的编程思想转到C#编程上来,需要在知识点讲解上对此问题有点拔勇哥的这套贴子会有大纲,主要特点是补足以上几点问题,...
2023-02-20 11:11:41
勇哥注:这个系列的贴子主要是为了培训用(专职自动化设备的C#软件工程师),因此例子的知识范围被限制在行业范围内。C#基础知识在网上是最多的存在,不足主要下面几点:1. 内容零碎,没有大纲来组织2. 什么功能都有讲,就是没有按实际项目的常用程度来组织3. PLC转上位机的人员,很难把PLC的编程思想转到C#编程上来,需要在知识点讲解上对此问题有点拔勇哥的这套贴子会有大纲,主要特点是补足以上几点问题,...
2023-02-19 11:53:15
勇哥注:这个系列的贴子主要是为了培训用(专职自动化设备的C#软件工程师),因此例子的知识范围被限制在行业范围内。C#基础知识在网上是最多的存在,不足主要下面几点:1. 内容零碎,没有大纲来组织2. 什么功能都有讲,就是没有按实际项目的常用程度来组织3. PLC转上位机的人员,很难把PLC的编程思想转到C#编程上来,需要在知识点讲解上对此问题有点拔勇哥的这套贴子会有大纲,主要特点是补足以上几点问题,...
2023-02-18 14:06:54
勇哥注:这个系列的贴子主要是为了培训用(专职自动化设备的C#软件工程师),因此例子的知识范围被限制在行业范围内。C#基础知识在网上是最多的存在,不足主要下面几点:1. 内容零碎,没有大纲来组织2. 什么功能都有讲,就是没有按实际项目的常用程度来组织3. PLC转上位机的人员,很难把PLC的编程思想转到C#编程上来,需要在知识点讲解上对此问题有点拔勇哥的这套贴子会有大纲,主要特点是补足以上几点问题,...
2023-02-17 22:04:43
勇哥注:这个系列的贴子主要是为了培训用(专职自动化设备的C#软件工程师),因此例子的知识范围被限制在行业范围内。C#基础知识在网上是最多的存在,不足主要下面几点:1. 内容零碎,没有大纲来组织2. 什么功能都有讲,就是没有按实际项目的常用程度来组织3. PLC转上位机的人员,很难把PLC的编程思想转到C#编程上来,需要在知识点讲解上对此问题有点拔勇哥的这套贴子会有大纲,主要特点是补足以上几点问题,...
2023-02-17 15:53:39
如果你和同事修改的同一个分支,改动都不小,为了防止提交冲突,覆盖对方的修改,避免出错,如何做呢首先将自己的修改暂存,git stash其次拉取对方修改的代码,git pull然后再 将你自己的改动取出, git stash pop有冲突就解,没有就提交git add .git commit -m 'update'git pull git push即可,完美!!!!—————————...
2023-02-17 13:59:17
勇哥注:由于VS自带有git管理功能且相当完善,所以第三方git工具相对来讲就显得不那么重要。通常技术人员会刻意维护技术的复杂性,会Git的人,可能会鄙视用Fork之类git图形化软件的人、以上两者都会鄙视用vs自带git工具的人,因为一门技术一但傻瓜就会伤了一些前辈的自尊。我们还是抛弃掉这种技术自尊,努力适应傻瓜型的新技术吧!(也许未来低端的编程都会傻瓜到机器自己去编制了)系列贴子汇总:VS的g...
2023-02-17 10:52:52
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。一、基本用法git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。$ git cherry-pick <co...
2023-02-16 23:30:40
勇哥注:此君的看法还是蛮有见地,特收录供大家共勉。先来看下《天龙八部》第39章——“解不了,名缰系嗔贪”——中几段描写大轮明王鸠摩智的文字,它给出了程序员如何不被淘汰的答案。鸠摩智道:“方丈要小僧主持公道,分辨是非,那是万万不敢。
只是小僧适才在山门外听到玄生大师和哲罗星大师讲论武功,颇觉两位均有不是之处。”
群僧都是一凛,均想:“此人口气好大。”玄生道:“敬请国师指点开示。”
鸠摩智微微一...
2023-02-16 10:22:33
勇哥注:由于VS自带有git管理功能且相当完善,所以第三方git工具相对来讲就显得不那么重要。通常技术人员会刻意维护技术的复杂性,会Git的人,可能会鄙视用Fork之类git图形化软件的人、以上两者都会鄙视用vs自带git工具的人,因为一门技术一但傻瓜就会伤了一些前辈的自尊。我们还是抛弃掉这种技术自尊,努力适应傻瓜型的新技术吧!(也许未来低端的编程都会傻瓜到机器自己去编制了)系列贴子汇总:VS的g...