
C#
文章平均质量分 65
斯内科
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C#获取图像指定像素位置的颜色
本文介绍了使用.NET Framework中System.Drawing.Bitmap类的GetPixel方法获取图像指定像素颜色值的技术方案。通过密封类Bitmap的GetPixel(int x, int y)方法,开发者可以精确获取图像任意坐标位置的Color结构体,包含RGB分量及透明度等属性。文中详细说明了位深度(BitDepth)原理,并提供了Windows窗体应用示例代码,演示了实时获取鼠标位置对应像素颜色信息的功能实现,包括显示RGB值、透明度及HSL色彩空间转换等特性。该技术适用于图像处理、原创 2025-08-09 12:13:04 · 419 阅读 · 0 评论 -
光标Cursor
CUR文件是静态光标格式,其结构与ICO图标文件相同但包含热点坐标标记点击位置。核心特点包括:1) 使用PE文件规范,含图像数据和透明掩码区;2) 热点坐标默认左上角,可自定义;3) 与ANI动态光标共享单帧结构。开发中可通过Cursor类加载,如游戏《古剑奇谭》通过代码动态切换自定义光标。制作工具如Microangelo支持PSD/JPG转CUR格式,但需注意高分辨率光标在低配设备可能闪烁。实际应用需处理多线程UI更新和热点位置逻辑。原创 2025-08-05 18:59:52 · 828 阅读 · 0 评论 -
C#将【程序集引用-依赖关系】展示到NetronLight图表中
本文介绍了如何在C#中将程序集引用关系可视化展示到NetronLight图表中。主要实现功能包括:1)修改NetronLight.SimpleRectangle的Paint事件使文本居中显示;2)创建FormShowAssemblyDependent窗体,包含树形视图和图表控件;3)递归获取程序集依赖关系并在树形视图中展示;4)根据节点层级在图表中生成矩形节点并自动布局;5)为存在引用关系的节点添加连接线。关键点包括计算文本宽度实现居中对齐、层级节点分组处理、自动布局算法以及引用关系连线处理。通过这种方式可原创 2025-07-18 17:28:57 · 336 阅读 · 0 评论 -
C#使用Roslyn框架编译器和代码分析(3):提取方法:某一个方法是否调用另一个方法
摘要:本文介绍了如何使用Roslyn框架分析C#代码中方法间的调用关系。通过创建部分类Program.Partial.cs,实现了一个IsCalledOtherMethod方法,该方法可以检测指定方法是否调用了另一个目标方法。该方法首先获取语法树中所有方法声明节点,然后查找指定方法内部的所有调用表达式,最后通过标识符匹配判断是否存在目标方法的调用。测试案例展示了该方法的使用方式,通过读取外部代码文件进行调用关系验证,并输出检测结果。该方法适用于代码分析和重构场景,能有效识别方法间的依赖关系。原创 2025-07-11 10:52:37 · 205 阅读 · 0 评论 -
C#使用MindFusion.Diagramming框架绘制流程图(4):为图表增加布局Layout
摘要:本文介绍了使用MindFusion.Diagramming框架实现加权图最短路径算法及多种布局方式的C#解决方案。文章详细说明了如何通过Layout基类派生不同布局样式(包括流程图、树形、分层、环绕等7种布局),并通过FormDijkstraDiagram窗体实现迪杰斯特拉算法计算节点间最短路径。代码展示了节点初始化、边连接、最短路径计算及可视化布局切换功能,其中特别演示了泳道布局和三角形布局两种典型效果。该实现通过下拉框切换不同布局方式,为加权图的可视化分析提供了灵活多样的展示方案。原创 2025-07-05 16:24:45 · 403 阅读 · 0 评论 -
C#使用开源框架NetronLight绘制流程图
本文介绍了使用开源框架NetronLight在C#中绘制流程图的方法。该框架核心由GraphControl控件组成,包含ShapeBase形状节点(矩形、椭圆、文本标签)和Connection连线。主要元素包括:1)Connector连接端点;2)ShapeBase形状基类及其三个子类;3)节点间连线。文章提供了完整的示例代码,演示如何创建各种形状节点并通过指定端点进行连线,最终形成完整的流程图结构。相比收费的MindFusion.Diagramming,NetronLight提供了轻量级的开源替代方案。原创 2025-07-05 15:21:04 · 820 阅读 · 0 评论 -
C#使用MindFusion.Diagramming框架绘制流程图(3):加权图的最短路径算法
使用MindFusion.Diagramming画出流程图,并按照当前示例图实现最短路径算法[迪杰斯特拉最短路径算法]我们使用MindFusion.Diagramming.DiagramItem的属性Weight权重来进行处理我们设定MindFusion.Diagramming.DiagramLink连接是双向的权重,连接的文本就显示为权重WeightMindFusion.Diagramming.DiagramNode节点之间的最短路径原创 2025-06-11 12:03:34 · 448 阅读 · 0 评论 -
C#使用MindFusion.Diagramming框架绘制流程图(2):流程图示例
摘要:本文介绍了如何使用MindFusion.Diagramming框架在C#中创建流程图应用程序。主要内容包括:1)新建Windows窗体项目并通过NuGet安装框架;2)添加DiagramView控件和Diagram组件;3)设置基本属性如网格显示、节点连接限制;4)实现节点创建、编辑和双击事件处理;5)添加"开始"和"结束"节点作为流程图基础;6)开发节点文本编辑窗口;7)实现获取所有节点和连接信息的按钮功能。文章通过代码示例详细演示了框架的基本使用方法,包括节原创 2025-06-07 16:47:20 · 799 阅读 · 0 评论 -
C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型
摘要:MindFusion.Diagramming是一款基于C#的图表绘制框架,通过MindFusion.Diagramming.dll库实现。该框架构建于GDI+之上,支持创建流程图、网络图等多种图表类型。核心组件包括Diagram(图表容器)、DiagramNode(节点基类)、DiagramLink(连线)和各类具体节点(如ShapeNode几何节点、SvgNode矢量节点、TableNode表格节点等)。框架提供丰富的属性控制,如节点输入输出连接、形状样式、文本编辑等,并支持XML序列化、拖放操作和原创 2025-06-06 18:20:13 · 1075 阅读 · 0 评论 -
C#对集合进行分组IGroupingout TKey, out TElement>
C#中的Linq提供了GroupBy()方法,用于根据指定的键选择器函数对集合元素进行分组,返回一个IEnumerable<IGrouping<TKey, TSource>>对象。IGrouping<TKey, TElement>接口表示具有公共键的对象集合,其中TKey为键的类型,TElement原创 2025-05-22 20:21:20 · 408 阅读 · 0 评论 -
C#使用文件读写操作实现仙剑五前传称号存档修改
手把手教学仙剑五前传 称号存档修改器首先找到 Pal5Q所在目录的save\global.sav 文件,这是一个只有488字节的文件,这里存放称号对应的编号ID,以及是否已获得该称号,1为已获取称号,0为未获取称号[称号:是否获取]这是一个键值对称号的编号ID是一个Int32数字,使用C#的方法BitConverter.GetBytes(编号ID)即可获取4个字节是否获取也是一个Int32数字,称号描述在一个明文的xml文件[title.xml]中 路径为 \Config\Data\title.原创 2025-02-15 15:18:22 · 717 阅读 · 0 评论 -
C#快速排序QuickSort将递归算法修改为堆栈Stack非递归方式
实现方法:我们可以发现:对于递归Recursive代码更新为堆栈Stack循环代码,仅需三个步骤即可实现:①将所有参数封装为元组Tuple或者一个自定义类如递归方法void QuickSortRecursive(int[] arr, int left, int right)就定义一个元组 Tuple<int[], int, int> 作为整体元素[参数集合]传递②定义一个泛型Stack,每个元素都是一个元组③将原来的使用递归方法调用自身的使用修改为推入堆栈中[Push]原创 2025-02-10 16:15:21 · 400 阅读 · 0 评论 -
C#中深度解析BinaryFormatter序列化生成的二进制文件
如果将二进制文件读取出来,然后篡改指定的字节码,生成新的二进制文件,然后重新读取,结果就会发现数据被篡改了.很多单机游戏的存档文件修改就是这么干的.这也是不提倡使用BinaryFormatter类进行序列化的原因,可能被劫持篡改二进制文件,因此在最新的net 5.0中会被标记为不安全的和过时的原因。原创 2025-02-08 17:36:56 · 647 阅读 · 0 评论 -
C#树图显示目录下所有文件以及文件大小
而一个目录(文件夹)System.IO.Directory是没有FileSize或者Length属性的.目录(文件夹)的大小是指该目录下所有子目录和所有文件大小的累加,按字节为单位.我们在打开某个目录属性时,可以查看到有大小信息.如下图。C#树图显示目录下所有文件以及文件大小。原创 2025-01-21 18:11:32 · 487 阅读 · 0 评论 -
C#使用WMI获取控制面板中安装的所有程序列表
WMI全称Windows Management Instrumentation,Windows Management Instrumentation是Windows中用于提供共同的界面和对象模式以便访问有关操作系统、设备、应用程序和服务的管理信息。如果此服务被终止,多数基于 Windows 的软件将无法正常运行。如果此服务被禁用,任何依赖它的服务将无法启动。WMI提供公用接口及对象模型,以存取有关操作系统、装置、应用程序及服务的管理信息。原创 2025-01-20 17:50:59 · 540 阅读 · 0 评论 -
C#中颜色的秘密
颜色Color是一个调色板,所有颜色都是由透明度Alpha,红Red,绿Green,蓝Blue按不同比例调色混合而成,如果不考虑透明度Alpha,颜色共有256*256*256=16777216种Color=ARGBA,R,G,B都为byte型[8位],因此可以用整体的32个整数[Int32]来表示一种颜色原创 2025-01-14 09:51:57 · 912 阅读 · 0 评论 -
C#使用OpenTK绘制3D可拖动旋转图形三棱锥
【代码】C#使用OpenTK绘制3D可拖动旋转图形三棱锥。我们绘制一个三棱锥,三棱锥需要四个顶点Vertex原创 2025-01-11 16:26:21 · 927 阅读 · 0 评论 -
C#使用OpenTK绘制一个着色矩形
OpenGL 是一种跨平台的图形渲染 API,用于创建 2D 和 3D 图形。OpenTK的目标是提供一个一致且高效的框架,让开发者能够专注于构建他们的游戏和图形应用程序,而无需担心底层硬件和操作系统之间的差异。因此,可以说 OpenTK 是 OpenGL 的一个封装库,它封装了 OpenGL 的底层实现,提供了更加易用的 C# 接口。总的来说,OpenTK是一个功能强大的跨平台游戏开发库,为C#开发者提供了便捷的开发接口和工具,使得开发者能够更加专注于游戏和图形应用程序的构建,提高了开发效率和便捷性。原创 2025-01-11 15:17:00 · 1027 阅读 · 0 评论 -
C#使用MVC框架创建WebApi服务接口
它定义了在管道中使用中间件来处理请求和相关响应的标准方法。WebAPI应用程序和中间件可以与基于 OWIN 的应用程序、服务器和中间件进行互操作。使用 Topshelf 可以非常方便的将一个 C# 控制台程序部署成为一个 Windows Service, 使用它可以很方便的构建跨平台服务寄主,而在调试时直接以控制台的形式运行即可,非常方便。Topshelf 是一个开源的跨平台的宿主服务框架,支持 Windows 和 Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。原创 2025-01-07 16:49:08 · 1615 阅读 · 0 评论 -
常见速度单位换算关系行列式
常见速度术语,速度单位有马赫,节,码,迈,千米/时(公里/时),米/秒.我们显示出速度换算表格原创 2025-01-02 16:20:57 · 2379 阅读 · 0 评论 -
使用DataGridView来实现的工步跳转
新建窗体应用程序ShowImageColumnDemo,将默认的Form1修改为FormShowImageColumn。工步跳转与绑定原创 2024-12-31 15:32:49 · 337 阅读 · 1 评论 -
打印自然常数E
自然常数,符号e,为数学中一个常数,是一个无限不循环小数,且为超越数,其值约为2.718281828459045。它是自然对数函数的底数。原创 2024-10-16 11:41:08 · 503 阅读 · 0 评论 -
C#使用TCP-S7协议读写西门子PLC(五)-测试程序
西门子PLC-S7协议测试读写基础数据类型、字符串、Unicode字符串等原创 2024-09-11 20:01:17 · 1321 阅读 · 0 评论 -
C#使用TCP-S7协议读写西门子PLC(四)
这里我们进行读写基础数据类型、读取DB块的字符串、宽字符串、以及一系列连续数组。新建部分类文件SiemensS7ProtocolUtil.Integrated.cs主要方法读取任意连续字节数据,任意多个Byte读取--每次最多读取200个字节,如果超过200,自动分多次读取public OperateResult ReadSerialData(PlcRegisterCategory plcRegisterCategory, ushort offsetAddress, ushort原创 2024-09-11 19:22:02 · 2064 阅读 · 0 评论 -
C#使用TCP-S7协议读写西门子PLC(三)
这里我们进行封装读写西门子PLC的S7协议命令以及连接西门子PLC并两次握手新建部分类文件SiemensS7ProtocolUtil.ReadWrite.cs主要方法:连接西门子PLC并发送两次握手。两次握手成功后,才真正连接到PLCpublic OperateResult ConnectPlcAndHandshake(SiemensPlcCategory siemensPlcCategory, IPEndPoint endPoint, int timeout = 3000)生成一个写入字节数据原创 2024-09-11 18:48:10 · 2430 阅读 · 0 评论 -
C#使用TCP-S7协议读写西门子PLC(二)
这里,我们开始进行读写西门子PLC,西门子PLC作为Socket通信的服务端【TCP-Server】在读写PLC之前,我们先进行Socket-Client程序编写,用于连接TCP服务端【也就是西门子PLC】,为了方便进行,我们使用部分类partial的方式【当然使用父子继承类亦可】,新建类文件SiemensS7ProtocolUtil.csSiemensS7ProtocolUtil类是部分类,需使用关键字partial原创 2024-09-11 17:36:23 · 1395 阅读 · 0 评论 -
C#使用TCP-S7协议读写西门子PLC(一)
西门子PLC的S7协议是西门子公司在ModbusTcp协议的基础上自定义的一种协议,仅支持西门子PLC,S7协议本质仍然属于TCP协议的一种自定义具体实现原创 2024-09-10 15:38:33 · 1408 阅读 · 0 评论 -
C#使用MQTT(二):MQTT客户端
为了一个应用程序可以作为客户端和服务端,我们在Program.cs增加切换开关。文件FormMqttClient.Designer.cs。窗体FormMqttClient程序代码如下:客户端程序。新建Windows窗体FormMqttClient。窗体FormMqttClient设计器相关代码如下。文件FormMqttClient.cs。选择作为MQTT服务端和MQTT客户端。上一篇我们初步设计了MQTT服务端。这里我们设计客户端,接上一篇。运行客户端与服务端通信。原创 2024-09-04 16:57:45 · 2716 阅读 · 2 评论 -
C#使用MQTT(一):MQTT服务端
的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。我们使用MQTTnet.dll,程序集 MQTTnet, Version=4.3.6.1152。低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息。它工作在 TCP/IP协议族上,是为。管理Nuget包,输入关键字Mqtt。原创 2024-09-04 16:05:09 · 5477 阅读 · 0 评论 -
C#使用GDI对一个图像Image进行任意角度旋转
新建winform应用程序RotatedRectangleDemo,将默认的Form1重命名为FormRotatedImage。文件 FormRotatedImage.Designer.cs。文件FormRotatedImage.cs。基于上篇的基础上,对图片进行任意角度旋转。找一下测试图片 云无月.jpg。上一篇我们对矩形进行旋转。原创 2024-08-14 12:14:42 · 683 阅读 · 0 评论 -
区域与语言CultureInfo
这些信息包括区域性的名称、书写系统、使用的日历、字符串的排序顺序以及对日期和数字的格式化设置。使用LCID是为了标识不同地区和语言的代码。它是Locale Identifier(区域设置标识符)的缩写,用于表示不同地区和语言的组合。语言ID是指一种语言,而子语言ID指的是地区或区域设置。在Windows操作系统中,LCID被广泛用于识别和设置地区设置,如日期和时间格式、货币单位、数字格式、键盘布局等。LCID,全称 Locale Identifier,区域设置标识符,用于确定特定地区和语言的区域设置。原创 2024-08-09 16:27:30 · 570 阅读 · 0 评论 -
解析西门子PLC的String和WString
西门子PLC有两种字符串类型,String与WStringString 用于存放英文数字标点符号等ASCII字符,每个字符占用一个字节WString宽字符串用于存放中文、英文、数字等Unicode字符,每个字符占用两个字节WString[50]为例:西门子PLC字符串类型 WString[50],占用104个字节(偏移量),第一第二个字节是最大长度,就是50,第三第四个字节是实际长度10,第五个字节之后就是Unicode码,PLC解析逻辑为找到第三第四个字节的长度actualLength,然后查找原创 2024-07-24 15:56:19 · 6423 阅读 · 0 评论 -
C#统一委托Func与Action
C#在System命名空间下提供两个委托Action和Func,这两个委托最多提供16个参数,基本上可以满足所有自定义事件所需的委托类型。几乎所有的 事件 都可以使用这两个内置的委托Action和Func进行处理。Action委托:Action定义提供0~16个参数,无返回值的委托Func委托:Func定义提供0~16个参数,有返回类型的委托共有17种重载:原创 2024-07-13 16:26:45 · 1178 阅读 · 0 评论 -
C#使用GDI对一个矩形进行任意角度旋转
C#对一个矩形进行旋转GDI绘图,可以指定任意角度进行旋转我们可以认为一张图片Image,本质就是一个矩形Rectangle,旋转矩形也就是旋转图片在画图密封类System.Drawing.Graphics中,矩形旋转的两个关键方法//设置旋转的中心点public void TranslateTransform(float dx, float dy);//旋转指定的角度【单位°】:旋转角度 从 X+ 到 Y+之间的旋转角度认为是正数public void RotateTransform原创 2024-06-01 15:41:18 · 1485 阅读 · 0 评论 -
C#中结构struct能否继承于一个类class,类class能否继承于一个struct
一般来说,当数据类型较小且需要频繁创建并传递时,例如表示坐标或颜色等简单的值类型,使用结构体更加合适,因为它们可以被分配在栈上,速度更快,且不需要垃圾回收。不能,因为在我现有的知识中理解的话,因为结构体是值类型而类是引用类型,所以类的资源是在堆上面的这样就可以达到我想象中的继承,因为它可以在堆上面存在,而不会像值类型那样随着程序运行结束终结,在C#设计中,所有的结构stuct都认为是一种轻量型的密封类,密封类sealed是无法被继承的。同样,类对象可以作为结构的成员变量,结构的示例也可以作为类的成员变量。原创 2024-05-29 11:41:18 · 1570 阅读 · 0 评论 -
C#中数组与列表,集合等的联系
C#中,所有数组都自动继承于System.Array这个抽象类,数组都为引用类型,所有对数组的更新都会导致源数组的元素值的篡改。而所有集合的根都来自可枚举接口IEnumerable数组有三种样式:数组的Rank(秩)属性代表数组的维数原创 2024-05-12 21:32:00 · 637 阅读 · 0 评论 -
C#中字典Dictionary与自定义类型CustomType之间的转换
C#中字典Dictionary与自定义类型CustomType之间的转换思路:可以使用反射System.Reflection来获取类的具体属性,属性名称就映射字典的键Key。新建控制台程序DictionaryCustomClassConversionDemo原创 2024-05-10 19:06:18 · 579 阅读 · 0 评论 -
C#调用java生成的WebService接口报错误【无法生成临时类(result=1)。 error CS0029】,解决方案:将锯齿数组X[][]修改为一维数组X[]即可
无法生成临时类(result=1)。error CS0029: 无法将类型“XX.stackTraceElement”隐式转换为“XX.stackTraceElement[]”之前使用调用WebService接口时,使用生成工具生成代码文件 Reference.cs。这里有个锯齿数组 stackTraceElement[][] suppressedField。编译和运行都没问题,当调用相关代码实例化WebService时,出错。解决方案是 修改 锯齿数组为单个一维数据即可。原创 2024-04-24 10:33:59 · 498 阅读 · 0 评论 -
关于使用TCP-S7协议读写西门子PLC字符串的问题
对西门子PLC字符串的读写逻辑如下:西门子PLC字符串逻辑 string[50],占用52个字节(偏移量),第一个字节是最大长度,就是50,第二个字节是实际长度24,第三个字节之后就是ASCII码,PLC解析逻辑为找到第二个字节的长度length.,然后查找length个字符,就结束原创 2024-03-24 17:39:48 · 3757 阅读 · 0 评论 -
关于OPC-UA客户端调用服务端方法CallMethod节点的问题
注意,调用方法节点时,必须传入指定的参数类型的值,不能传入可以隐式转化的实参比如在OpcServer服务器上有个方法节点,方法名为readJob,需要传入两个参数 (byte sourceNumber, short jobNo),返回一个工作名称string jobName 方法整体描述为 string readJob(byte sourceNumber, short jobNo)传入的实参 new object[]{1,23};会抛出异常,因1和23在C#中是Int32类型,不是byt原创 2024-03-15 22:50:23 · 1094 阅读 · 0 评论