C#踩坑:谨慎在XML数据列上绑定鼠标事件!
按照计划,昨天晚上就完成最后的公式自动计算,程序的流程就算完整了,可以正常运行了,一般情况下,是可以完成的。
10点开始干,窗体上放置一个Treeview,然后针对XML对Treeview进行数据绑定,就是根据XML数据初始化Treeview的显示。
这个前期也做过,很快就完成了。
做一个调用窗体,放上一个DataGridView,里面显示所有设计XML计算公式的数据行。每个计算结果都对应一个XML数据列,因为计算结果是XML自动计算的结果,后面可能更改计算所以要保留XML的完整内容。
在DataGridView的单元格双击事件(CellDoubleClick)中进行处理:
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e){float fField04 = 0;string StrField08Xml = "";//检查双击的单元格,弹出对应的计算窗口if (e.ColumnIndex == dataGridView1.Columns["F04"].Index){StrField08Xml = dataGridView1.Rows[e.RowIndex].Cells["Field08"].Value.ToString();FrmSXKNX Frm1 = new FrmSXKNX(StrField08Xml);DialogResult result = Frm1.ShowDialog();if (result == DialogResult.OK){fField04 = FrmSXKNX.ReturnInfo.fValue;StrField08Xml = FrmSXKNX.ReturnInfo.StrXml;dataGridView1.Rows[e.RowIndex].Cells["Field04"].Value = fField04;dataGridView1.Rows[e.RowIndex].Cells["Field08"].Value = StrField08Xml;}}//其他计算字段的处理//......}
FrmSXKNX窗体的构造函数:
public FrmSXKNX(){InitializeComponent();}public FrmSXKNX(string StrXml){InitializeComponent();StrXmlContent= StrXml;InitDataGridView();LoadXMLToTreeView();}
结果开始让人不胜烦恼的踩坑!!!
运行,双击DataGridView的列,程序阻塞,卡死,FrmSXKNX窗体根本不显示出来!
这是什么问题?!
难道是XML数据不对?数据没有正确的提取?
检查,XML内容正确,格式也是正确的,XML数据长度13961字节,没问题。
难道是XML太长了,渲染Treeview的时候用了递归导致程序阻塞?将XML字段数据改小一些,结果还是卡死。
我将LoadXMLToTreeView();放到一个按钮下执行,构造函数只接收参数,开始竟然可以通过,程序正常了!
可是这样也不是解决办法,就将LoadXMLToTreeView();放到窗体的Shown事件中,可是程序又卡死了。
太奇怪了!
那就使用异步处理:
private asyn void FrmSXKNX_Shown(object sender, EventArgs e){await Task.Delay(1000);init();LoadXMLToTreeView();}
结果程序还是卡死!!!
是不是窗体FrmSXKNX本身出了问题,检查FrmSXKNX.Designer.cs也没有发现异常,就做一个最简单的调用,结果也是好的。
那只能是DataGridView的单元格双击事件(CellDoubleClick)有问题了,可是这代码再简单不过了,怎么会有问题?!
干脆隐藏XML列,双击Field04列后调用FrmSXKNX,结果,程序正常了!!!
终于明白了,原来是XML列出了问题!!!因为我没有限制XML列为只读,导致双击该列的时候会有编辑提取XML列数据内容并进行编辑的准备,这部分工作比较耗时,所以程序阻塞了。
这个坑就是以后编辑XML,在DataGridView上最好是隐藏该列,如果要处理这一列,可以放置一个按钮列,或者对应到其他的列进行处理。
如果一定要绑定鼠标事件,那么可以将该列置为只读,或者减小该字段的大小。
昨天忽然明白为什么有许多不喜欢Visual Studio的C#,C#的确内涵丰富、功能强大,可是Visual Studio实在不好用,臃肿拉胯甚至远不如VSCode轻巧灵活,比如事件编辑,为了避免代码混乱,可以封装这些编辑,让用户进行事件选择后直接编写代码,至于事件前面的修饰符号可以选择就行了,可以通过在事件前面加图标来显示该事件的编写状态,空的不显示,有代码的显示为一种图标,是继承的显示另外的图标或者颜色,等等。
这样至少可以避免很多的人为问题,代码看起来也规整,方便追溯。
相关文章:
C#踩坑:谨慎在XML数据列上绑定鼠标事件!
按照计划,昨天晚上就完成最后的公式自动计算,程序的流程就算完整了,可以正常运行了,一般情况下,是可以完成的。 10点开始干,窗体上放置一个Treeview,然后针对XML对Treeview进行数据绑定…...
逻辑代数运算
逻辑代数运算中的三种基本运算 与(AND):只有满足全部条件,才会产生结果 或(OR) :只要满足一个条件,就会产生结果 非(NOT):只要满足条件ÿ…...
win10笔记本显示器根据页面显示亮度自动调节亮度的问题
系统是win10企业版,针对这个问题查了很多种方法,比如: 1、控制面板->硬件和声音->电源选项->点击当前电源计划的更改计划设置->更改高级电源设置->显示->启用自适应亮度 但是我发现我的电源计划只有平衡这一种,…...
无人驾驶实战-第一课(自动驾驶概述)
在七月算法上报了《无人驾驶实战》课程,老师讲的真好。好记性不如烂笔头,记录一下学习内容。 课程入口,感兴趣的也可以跟着学一下。 ————————————————————————————————————————— 无人驾驶汽车的定义…...
15.节点操作
15.1 DOM节点 1.DOM节点 DOM树里每一个内容都称之为节点 2.节点类型 ●元素节点 所有的标签 比如body、div html是根节点 ●属性节点 所有的属性 比如href ●文本节点 所有的文本 15.2查找节点 1.父节点查找: parentNode属性 返回最近一级的父节点找不到返回为n…...
C语言自定义类型 — 结构体、位段、枚举、联合
前言 本期主要对通讯录三篇博客文章进行补充 通讯录文章:通讯录系列文章 对结构体进行详细介绍,其次讲解位段、枚举、联合体 文章目录 前言一、结构体1.什么是结构体2.结构声明2.1 声明格式2.2 如何声明(代码演示) 3.特殊声明3.1…...
新手指南:流程图中各种图形的含义及用法解析
我们经常在技术设计、沟通、业务演示等一些领域看到流程图,它也可以称为输入输出图。顾名思义,它是指一种简单的工作流程的具体步骤,比如包括一次会议的流程,以及一次生产制造的顺序和过程等。本文将为大家介绍流程图的含义和具体…...
【知识产权】专利的弊端
接上篇【知识产权】著作权的作用_qilei2010的博客-CSDN博客。 1 专利的分类 首先,专利分为:发明专利、实用新型专利、外观设计专利。这里要说明的是专利的不同种类在不同的国家都是有不同规定的,并不是所有国家和地区都是分成这三类。 >国家法律法规数据库 >中华…...
用Rust实现23种设计模式之抽象工厂
在 Rust 中,可以使用 trait 和泛型来实现抽象工厂模式。抽象工厂模式是一种创建型设计模式,它提供了一个接口来创建一系列相关或依赖对象的家族,而无需指定具体的类。下面是一个简单的示例,展示了如何使用 Rust 实现抽象工厂模式&…...
31.利用linprog 解决 投资问题(matlab程序)
1.简述 语法:[X,FVAL] linprog(f,a,b,Aeq,Beq,LB,UB,X0); X 为最终解 , FVAL为最终解对应的函数值 *注意:求最大值时,结果FVAL需要取反* f 为决策函数的系数矩阵。 *注意:当所求为最大值…...
整数线性规划求解工具isl使用方法
整数线性规划求解工具 Integer Set Library 代码 参考 isl是一个用于多面体模型调度实现的c/c库。通过isl,我们可以对模型进行自动的调度,循环优化等。 编译 ISL,Integer Set Library 版本0.22.1,http://isl.gforge.inria.fr/ README关于…...
SystemC的调度器
文章目录 前言调度器初始化evaluatewait updatenotify delta notificationtime notification仿真结束 前言 SystemC是基于C的库,主要用来对 IC 进行功能建模和性能建模。有时也被用来当做 RTL (register transfer level) 级的升级版 HLS(High Level synthesis) 直接…...
SpringBoot、SpringCloud 版本查看
1、SpringBoot 官网地址 https://spring.io/projects/spring-boot#learn spring-boot-starter-parent 版本列表可查看: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent 2、SpringCloud 官网地址 https://spring.io/pro…...
AI Chat 设计模式:12. 享元模式
本文是该系列的第十二篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 给我介绍一下享元模式A.1Q.2 也就是说,其实共享的是对象的内部状态&…...
Spring mvc:SpringServletContainerInitializer
SpringServletContainerInitializer实现了Servlet3.0规范中定义的ServletContainerInitializer: public interface ServletContainerInitializer {void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException; }SpringServletCont…...
微信小程序中的全局数据共享(状态管理)使用介绍
开发工具:微信开发者工具Stable 1.06 一、状态管理简介 微信小程序全局状态是指可以在不同页面之间共享的数据或状态。 它可以存储用户的登录状态、个人信息、全局配置信息等。 二、安装MobX 1、安装NPM 在资源管理器的空白地方点右键,选择“在外部…...
LLM - LLama 模型读取报错 TypeError: not a string
一.引言 读取 LLama2 模型时报错 TypeError: not a string 看异常栈是 AutoTokenizer.from_pretrained 时候的异常。 二.问题解决 出现类似加载模型异常的问题,大致分两类: ◆ 模型地址异常 脚本里传的 pretrained_model Path 有问题,加 …...
2023年08月在线IDE流行度最新排名
点击查看最新在线IDE流行度最新排名(每月更新) 2023年08月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…...
k8s的架构
简介 一个 K8s 系统,通常称为一个 K8s 集群,集群主要包括两个部分 一个 Master 节点(主节点) 一群 Node 节点(计算节点) Master节点 Master 节点包括 API Server、Scheduler、Controller manager、etcd A…...
数据分析基础-Excel图表的美化操作(按照教程一步步操作)
一、原始数据 包含月份和对应的销量和产量。 时间销量产量1月60722月38673月28344月58685月67596月72357月61428月24319月556710月243511月122112月2645 二、原始的图表设计-采用Excel自带模板 三、优化思路 1、删除多余元素 2、弱化次要元素 对于可以弱化的元素,…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
