- 博客(3129)
- 资源 (44)
- 收藏
- 关注

原创 鸿蒙OS应用开发的开发环境
当你想投入到这个生态系统里的时候,首先是使用它,这是最方便的方法,比如买一台带有鸿蒙系统的手机,并且不断地使用它,提出你自己的建议,让它进行完善和改进。在这里主要开始学习开发鸿蒙系统的应用,由于鸿蒙系统发布的时间不是很久,当然是相对安卓和IOS来说,因此它是一个全新的系统,并且致力于创建一种更方便的软件方式,它引入不同于以往的软件开发语言,以及不同的界面接口。这时候,就可以看到应用的名称,包的名称,保存的位置,编译的SDK版本,运行模式,是否可视化编辑,语言,兼容性API,设备类型。
2023-12-07 12:31:53
820
1
原创 ZedGraph库里属性介绍(4)AxisLabel
ZedGraph图表库中的AxisLabel类继承自GapLabel,专门用于处理坐标轴标题的显示和属性。该类的核心功能包括:1)通过IsOmitMag属性控制是否在标题中显示数据缩放的数量级因子(如10^3);2)通过IsTitleAtCross属性决定当坐标轴位于图表内部时标题的显示位置。此外,该类还支持克隆和序列化操作,便于保存和恢复配置。AxisLabel在基础文本标签功能上增加了这两个针对坐标轴标题的特殊控制,使开发者能够更精细地调整图表轴标题在不同数据范围和轴位置下的显示效果。
2025-09-23 10:38:45
53
1
原创 ZedGraph库里属性介绍(3)Axis
ZedGraph库中的Axis类是一个抽象基类,定义了图表坐标轴的核心功能。它主要包含以下功能:1. 坐标轴配置:管理位置、可见性和颜色等属性;2. 比例尺系统:通过Scale对象实现数据到像素的转换,支持线性、对数等比例类型;3. 刻度线和网格线:控制主次刻度线和网格线的绘制;4. 标签标题:管理轴标题和刻度标签的显示;5. 布局计算:自动计算坐标轴所需空间;6. 绘制功能:渲染所有坐标轴元素;7. 序列化支持:保存和加载配置。该类为XAxis、YAxis等具体坐标轴类提供基础实现,是ZedGraph图表
2025-09-23 08:27:54
178
原创 ZedGraph库里属性介绍(2)ArrowObj
ZedGraph库中的ArrowObj类实现了图表箭头的绘制功能。该类继承自LineObj,支持定义箭头起点/终点坐标、大小和样式等属性,通过IsArrowHead属性控制是否显示箭头头部。核心功能包括坐标转换、角度计算和图形渲染,实现了ICloneable和ISerializable接口以支持对象克隆和序列化。该类通常作为GraphObjList集合元素,用于在图表中添加标注指示,增强数据可视化效果,其渲染过程通过坐标变换简化了任意角度箭头的绘制逻辑。
2025-09-23 08:24:33
117
原创 ZedGraph库里属性介绍(1) ZoomButtons
ZedGraph库中的ZoomButtons属性用于设置图表缩放功能的鼠标按键。该属性基于C#的MouseButtons枚举类型,支持左键(Left)、右键(Right)、中键(Middle)等选项,默认使用左键。通过ZoomButtons和ZoomModifierKeys组合可定义主缩放操作,同时还提供ZoomButtons2和ZoomModifierKeys2作为次要缩放选项。若不需要某个缩放组合,可将其设置为MouseButtons.None。这些属性均位于Display分类下,具有默认值和描述信息。
2025-09-18 08:27:52
99
原创 ZedGraph库里实现拖动拉伸曲线
本文介绍了在ZedGraph库中实现曲线拖动拉伸功能的方法。通过设置可拉伸区域标识(_showFlexBackground),在用户鼠标进入该区域时提示可操作。核心实现包括:1) 记录拉伸起点坐标(_flexPoint);2) 判断鼠标是否在拉伸区域(LookForFlexAxis);3) 绘制贯穿曲线的拉伸辅助线;4) 处理拉伸动作,根据拖动距离计算缩放因子,动态调整坐标轴范围。该功能允许用户通过拖动操作对密集曲线进行局部放大,便于观察细节,同时保持与其他窗格的轴同步更新。
2025-09-16 09:32:53
62
原创 ZedGraph库里实现坐标拖动图形的背景显示3
本文介绍了在ZedGraph库中实现坐标轴拖动功能的实现方法。主要通过处理鼠标事件实现:1)在MouseDown事件中检测是否处于可拖动区域并初始化拖动状态;2)在MouseMove事件中计算坐标变换,调用PanScale方法实现曲线平移;3)在MouseUp事件中处理拖动结束逻辑。关键步骤包括坐标转换、曲线平移(PanScale)以及状态保存,实现了图形拖动的交互功能。
2025-09-15 10:11:24
52
原创 ZedGraph库里实现坐标拖动图形的背景显示2
文章介绍了在ZedGraph库中实现坐标轴拖动图形背景显示的控制逻辑。通过处理鼠标移动事件(ZedGraphControl_MouseMove),调用RefreshAxis函数检测鼠标位置是否落在坐标轴的可拖动区域。LookForDragAxis方法通过计算坐标轴区域来判断鼠标位置,RefreshAxisBackground函数根据判断结果控制背景显示(ShowDragBackground)。当鼠标进入坐标轴区域时显示拖动背景,离开时则隐藏,实现了交互式的背景显示效果。
2025-09-15 08:57:30
184
原创 ZedGraph库里实现坐标拖动图形的背景显示
本文介绍了在ZedGraph库中实现坐标轴拖动功能的技术方案。通过修改Axis类的Draw方法,在坐标轴区域添加半透明矩形背景来标识可拖动区域。关键点包括:1) 利用_tmpSpace变量管理坐标轴空间;2) 通过Scale类传递拖动区域高度参数;3) 使用半透明颜色填充矩形区域;4) 添加_showDragBackground变量控制拖动区域的显示状态。该方案实现了当鼠标进入可拖动区域时的视觉反馈,为后续的坐标轴拖动功能奠定了基础。
2025-09-12 18:01:07
208
原创 ZedGraph库里GraphPane类里Chart的作用是什么
ZedGraph库中的GraphPane.Chart是数据可视化的核心容器,负责管理绘图区域的布局和渲染。主要功能包括:定义绘图边界(Chart.Rect)、坐标系转换(数据值到像素坐标)、绘制背景和边框。它与坐标轴、曲线、图例等组件紧密协作,通过分离关注点和预计算布局提升性能。Chart作为数据呈现的"物理画布",约束着所有可视化元素的绘制范围,是自定义绘图和交互开发的基础。
2025-09-12 15:18:56
59
原创 ZedGraph画坐标轴的调用栈
ZedGraph库绘制坐标轴的调用栈解析:从ZedGraphControl.OnPaint入口触发,依次通过MasterPane.Draw(布局管理)、GraphPane.Draw(单个图表绘制)、Axis.Draw(坐标轴控制),最终由Scale.Draw实现具体图形渲染。该调用链采用责任链模式,各层专注自身职责(控件→布局→图表→轴→刻度),Graphics对象贯穿传递。性能瓶颈在Scale.Draw的图形操作,典型扩展点包括在GraphPane.Draw插入自定义逻辑或继承Scale类实现特殊刻度渲染
2025-09-11 17:35:32
64
原创 C#里使用NModbus来读取寄存器的值
摘要:本文介绍了使用NModbus库实现Modbus TCP客户端的C#代码示例。程序通过TcpClient连接Modbus从站服务器,利用ModbusFactory创建主站实例,实现了连接管理、日志记录和寄存器读取功能。客户端可指定IP地址、端口号、从站ID和寄存器地址,通过ReadHoldingRegisters方法读取保持寄存器数据,并将结果显示在界面上。代码包含异常处理机制,确保程序稳定性,为工业自动化领域的Modbus通信开发提供了实用参考。
2025-08-07 14:30:08
125
原创 C#里使用NModbus来创建一个TCP从站服务
摘要:本文介绍了一个用C#实现的Modbus TCP从站服务器,基于.NET Framework 4.6.1开发。代码使用NModbus库创建TcpListener和ModbusSlaveNetwork,支持设置IP地址、端口号和从站ID。服务器实现了数据存储初始化功能(包括线圈和保持寄存器),并提供了启动/停止操作的UI界面和日志记录功能。该解决方案适用于需要调试Modbus TCP协议的场景,特别适合无法升级到更高版本.NET Framework的环境。
2025-08-06 08:55:08
137
原创 在pycharm里实现FastAPI调试
【摘要】本文介绍了如何快速搭建一个FastAPI服务。首先通过pip安装FastAPI和uvicorn,然后创建一个简单的API应用。示例代码展示了如何定义根路由并返回JSON响应,同时演示了使用uvicorn启动服务的方法,包括设置主机地址、端口号和开发时实用的自动重载功能。文中特别强调了使用字符串"main:app"而非直接传递app对象的正确启动方式。
2025-07-17 11:09:34
262
原创 System.Windows.Forms.ToolTip
摘要:System.Windows.Forms.ToolTip类是.NET Framework中用于创建工具提示的组件,当鼠标悬停在控件上时会显示提示文本。它主要提供控件功能说明和自定义显示效果,支持设置显示时间、延迟等属性。核心方法SetToolTip()可为控件添加提示文本。示例代码展示了如何为按钮添加5秒显示、1秒延迟的提示信息,增强界面交互性。(148字)
2025-07-10 13:36:23
133
原创 ZebGraph后台生成图片的方法
摘要:本文介绍了一种无需UI界面、通过后台线程静默生成图片的高效方法。使用System.Drawing和ZedGraph库创建正弦曲线图表,通过Task.Run在后台每5秒自动生成并保存PNG格式图片。代码展示了完整的实现过程,包括图表创建、数据添加、样式设置和内存流保存,适用于需要批量生成图表的场景。该方法避免了UI线程阻塞,提高了图片生成效率。
2025-06-27 09:35:18
99
原创 VS2022的C#打包出错解决
【摘要】系统提示需下载.NET Framework 4.8.1组件以启用离线安装功能。解决方案是将指定文件"NDP481-x86-x64-AllOS-CHS.exe"下载至本地目录。若需发布离线安装包,需将英文版文件"NDP481-x86-x64-AllOS-ENU.exe"放入指定路径。具体操作可参考微软官方链接提供的指导文档。该操作是实现系统必备组件本地化部署的关键步骤。
2025-06-25 11:10:16
257
原创 C#里从CSV文件加载BLOB数据字段到数据库的处理
摘要:本文介绍了使用MySqlBulkLoader类将CSV文件快速导入MariaDB数据库的方法。相比传统SQL导入(约10秒),该方法仅需2秒,效率提升5倍。内容包含CSV文件格式示例、产品类定义及完整实现代码,核心是通过配置MySqlBulkLoader参数(字段分隔符、字符编码等),添加列映射和转换表达式(如BASE64解码),最终调用Load方法执行批量导入。该方法支持自定义数据库连接、表名和字段处理逻辑,适用于需要高效数据迁移的场景。(149字)
2025-06-18 11:38:06
211
原创 C#里从类属性生成CSV文件
本文介绍了一个将对象列表转换为CSV文件的C#实现方案。代码通过反射获取对象属性,支持DisplayName特性作为表头,并自动处理特殊字符(包括逗号、引号和换行符)的转义。特别针对二进制数据(如byte[]类型)采用了Base64编码转换,便于后续存储到数据库。该方案提供ToCsv()和SaveToCsv()两个核心方法,支持自定义分隔符、是否包含表头以及编码格式,实现了稳定可靠的CSV文件生成功能,适用于需要保存大量信号数据供其他程序处理的场景。
2025-06-18 11:24:29
148
原创 C#里与嵌入式系统W5500网络通讯(7)
摘要:W5500芯片的Socket状态机管理方法,介绍了TCP连接的9种状态(如CLOSED、INIT、ESTABLISHED等)及其转换条件。客户端实现流程为:检测Socket状态→CLOSED时初始化→INIT时连接服务器→ESTABLISHED时数据收发→CLOSE_WAIT时关闭连接。关键操作包括socket()初始化、connect()建立连接、getSn_RX_RSR()获取数据长度、recv()/send()数据收发等,通过寄存器操作实现TCP状态转换和数据传输。
2025-06-14 11:50:35
225
原创 C#里与嵌入式系统W5500网络通讯(6)
摘要:文章解析了嵌入式系统中MAC地址写入寄存器的实现方式。通过setSHAR宏定义将MAC地址写入源硬件地址寄存器(SHAR),该宏采用WIZCHIP_WRITE_BUF函数直接操作寄存器,避免了函数调用的开销。文中详细说明了SHAR寄存器的地址构造方法(0x0009偏移)和6字节MAC地址格式,并展示了WIZCHIP_WRITE_BUF函数的底层SPI总线操作实现,包括字节/突发两种写入模式。这种设计体现了嵌入式系统对执行效率和资源利用的优化考量。
2025-06-14 11:06:46
147
原创 C#里与嵌入式系统W5500网络通讯(5)
摘要:代码定义了一个wiz_NetInfo结构体存储网络配置参数,包括MAC地址、IP地址、子网掩码、网关和DNS等字段,支持静态IP和DHCP两种模式。NetworkParameterConfiguration函数演示了如何初始化网络芯片参数:先设置静态IP和网关,然后读取验证配置,最后获取芯片ID确保操作成功。该结构体主要用于嵌入式网络设备的初始化配置,通过CN_SET_NETINFO等控制命令实现参数写入和验证。
2025-06-14 10:43:22
261
原创 C#里与嵌入式系统W5500网络通讯(4)
要修改W5500芯片中socket的收发缓冲区,需执行以下步骤:1. 了解缓冲区作用及硬件资源;2. 通过寄存器Sn_RXBUF_SIZE配置接收缓冲区大小(1-16KB),Sn_TXBUF_SIZE配置发送缓冲区;3. 所有socket缓冲区总和不超过16KB;4. 调用wizchip_init函数初始化,传入二维数组设置各socket缓冲区大小(如默认2KB)。注意需检查缓冲区参数合法性,确保总和不超过限制。代码示例展示了如何通过寄存器操作和函数调用实现配置修改。
2025-06-01 11:24:01
296
原创 C#里与嵌入式系统W5500网络通讯(3)
W5500芯片的PHY配置寄存器(PHYCFGR)用于控制物理层操作模式,地址为0x002E。该寄存器包含7个主要功能位:复位位(RST)、操作模式选择位(OPMD)、模式配置位(OPMDC)、以及三个只读状态位(DPX/SPD/LNK)。其中OPMDC位可配置7种工作模式,包括不同速率和双工设置。硬件初始化时需要检查LNK位(bit0)判断链路连接状态,示例代码展示了通过getPHYCFGR()函数读取寄存器值并检测链路状态的实现方法。该寄存器支持通过软件或硬件引脚两种方式配置PHY模式。
2025-06-01 11:01:51
368
原创 C#里与嵌入式系统W5500网络通讯(2)
在嵌入式系统中,通过SPI接口访问W5500芯片需要遵循特定的通信协议。首先,硬件上需正确连接SPI线路。通信时,数据格式包括16位地址、控制字节(用于选择寄存器和操作模式)以及数据字节。例如,接收缓冲区的地址可通过宏定义计算得出。读写操作通过函数实现:WIZCHIP_READ用于读取数据,WIZCHIP_WRITE用于写入数据。这些函数通过SPI接口发送地址和控制信息,并根据操作模式选择单字节或批量传输。操作完成后,需释放片选信号以结束通信。
2025-05-18 11:42:40
266
原创 C#里使用Prism.Core的例子
在WPF应用程序开发中,使用Prism.Core框架可以显著加速开发过程。首先,通过安装Prism.Core及其依赖包来配置项目环境。接着,创建应用程序的主窗口文件,定义XAML布局和资源,包括数据模板和转换器,用于处理UI元素的显示逻辑。然后,编写后台代码以处理用户交互,如列表项的选择事件。此外,定义数据模型(Models)和视图模型(ViewModels)来管理应用程序的数据和业务逻辑。视图模型中使用Prism的DelegateCommand来处理命令绑定,实现数据的过滤和选择功能。整个开发流程通过模块
2025-05-16 13:24:21
372
原创 C#里WPF使用触发器实现鼠标点击响应
在WPF中,通过自定义用户控件实现鼠标点击事件响应,可以使用事件触发器。在ListView中,每个TextBlock项通过Interaction.Triggers绑定MouseLeftButtonDown事件,触发InvokeCommandAction执行TextBlockClickCommand命令,并传递当前绑定对象作为参数。在ItemMenu类中,TextBlockClickCommand通过RelayCommand初始化,点击时调用OnTextBlockClick方法处理事件。RelayComman
2025-05-12 11:00:33
379
原创 C#WPF里不能出现滚动条的原因
在WPF中使用mdix:DrawerHost.LeftDrawerContent时,默认的RowDefinition高度设置为auto会导致滚动条无法显示。通过将RowDefinition的高度修改为比例值(如*),可以确保ScrollViewer能够正确显示垂直滚动条。具体修改为<RowDefinition Height="*"/>后,ScrollViewer的VerticalScrollBarVisibility属性生效,滚动条得以显示。这种调整适用于需要动态调整内容高度
2025-05-12 08:49:58
330
原创 C#里与嵌入式系统W5500网络通讯(1)wizchip_sw_reset
wizchip_sw_reset()函数用于实现WIZnet网络芯片(如W5500)的软件复位功能。该函数通过向模式寄存器写入复位命令(MR_RST)触发芯片复位,并在复位前后保存和恢复关键网络配置参数,如MAC地址、网关、子网掩码和IP地址,以确保网络配置不变。代码通过条件编译处理间接总线模式下的特殊需求,确保在不同通信模式下正确访问寄存器。复位后,函数通过读取寄存器实现简易延时,确保芯片完全初始化。该函数适用于系统初始化、网络异常恢复等场景,需注意延时和线程安全问题,且不同型号芯片可能存在细微差异。
2025-05-11 12:40:30
176
原创 C#里创建一个MaterialDesign3的导航条
本文详细介绍了如何创建一个带有左侧导航窗口的WPF应用程序。首先,通过XAML定义了主窗口的结构,包括窗口样式、背景颜色、标题栏内容等。接着,使用DrawerHost控件实现了左侧导航抽屉,并通过ToggleButton控制其展开与收起。在代码部分,通过InitMenu方法初始化了导航菜单,使用自定义控件UserControlMenuItem来显示菜单项及其子项。ItemMenu和SubItem类分别用于管理菜单项和子项的数据。最终,通过绑定和布局,实现了左侧导航窗口的动态显示与交互功能。
2025-05-09 17:16:03
300
原创 C#里创建一个TCP客户端连接类
TCP客户端,一般分为两种,一种是同步收发数据,这种需要开发线程来处理。另外一种,就是使用异步连接,这样只需要一个线程,就可以连接很多个。如果连接比较多,就会消耗比较多线程。C#里创建一个TCP客户端连接类。
2025-04-29 16:37:15
479
原创 C#里嵌入lua脚本的例子
以便发现脚本有什么问题,不能在MCU里去发现问题,否则那样会比较困难调试,或者不适合提示。比如在GD32的MCU里运行lua脚本,又者在ESP32里运行它,都是比较方便的。当脚本要发送给MCU运行之前,我们需要在PC的软件里对脚本进行编译,由于lua脚本比较小,并且适用性很强,非常适合嵌入式系统里加入。所以需要在PC里进行预编译,并且进行语法检查是否合法。这样就需要在C#里引入lua脚本引擎。
2025-04-29 08:55:12
612
原创 C#里使用libxl来创建EXCEL文件然后发送到网络
本例子就说明怎么样创建一个EXCEL文件,也可以直接发送到网络,而不需要保存到文件,直接在内存里高效操作。在这里要使用函数SaveRaw,输入参数是保存数据缓冲区和缓冲区的大小,返回数据和大小。前面一个例子说明了从网络直接读取EXCEL数据的方法,
2025-04-26 12:06:48
206
原创 C#里使用libxl来加载网络传送过来的EXCEL文件
如果文件比较小,就不必要这样做了,可以直接保存在内存,然后使用函数LoadRaw就解决了。是不是把数据先保存到文件,再使用传统的方式打开它呢?从服务器传送过来的数据,是一个EXCEL文件,其实这样做,也是可以的,对于比较大的文件来说。那么怎么样获取里面的数据比较合适呢?这样就可以读取EXCEL数据。
2025-04-26 11:57:00
296
原创 C#里使用MaterialDesign时在VS2022里出错
- 新版 Microsoft.Xaml.Behaviors 的声明 -->这样就可以在VS2022里使用materialdesign了,-- 旧版 Blend SDK 的声明 -->需要修改为最后这个才不会出错。
2025-04-13 11:18:44
247
原创 C#里使用MaterialDesign来构造自定义窗口
它是一个采用MaterialDesign开源库来创建的WPF程序。WPF程序要复杂很多,一个简单的工程,就需要写这么多代码。本例子主要就是创建一个上面的界面,
2025-04-11 15:04:21
257
原创 C#里设计Modbus-RTU(Remote Terminal Unit)协议
广泛用于工业自动化领域,支持主从式(Master-Slave)通信架构。从站地址=01,功能码=03,起始寄存器地址=0x006B(十进制107),寄存器数量=3。从站验证地址和CRC后,执行操作并返回响应帧(成功返回数据,失败返回异常码)。返回6字节数据(3个寄存器的值:0x022B, 0x0000, 0x0064),从站地址=01, 功能码=03, 返回字节数量=06, 后面是3个寄存器值。:1字节(如03=读保持寄存器,06=写单个寄存器)。:1字节(0~247,0为广播地址)。
2025-04-09 15:51:51
243
原创 C#里使用libxl来改变字体的特性
因为打印机基本上都是黑白的颜色,只有字体的大小和黑白才能引起人们的关注。因为不同的字体和大小,就突出对不同内容的关注程度。在做报表的过程中,字体是很关键的信息。
2025-04-05 12:58:16
187
原创 C#里第一个WPF程序
WPF程序对界面进行优化,但是比WINFORMS的程序要复杂很多,并且界面UI基本上不适合拖放,所以需要比较多的时间来布局界面,随着客户对界面的需求提高,还是需要采用这样的方式来实现。产且需要开发人员编写更多的代码。即使如此,在面对诱人的界面表现,App.xaml文件中定义。从这几堆代码来看,就比较多。
2025-04-03 14:08:02
294
tinyxml2配套源码
2016-06-27
国产8051模拟器
2016-09-10
python抓取天气并分析 实例源码
2017-08-28
胶囊模型的代码
2018-02-02
书《深度学习》
2017-03-13
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
实现numpy的C++库扩展
2019-11-24
svm_hog_data.rar
2020-03-02
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人