终于解决了TTreeView中Node更换图片的问题(Delphi)

2023-10-03 23:10

本文主要是介绍终于解决了TTreeView中Node更换图片的问题(Delphi),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Delphi的环境真的是有些难用。
TTreeView控件显示节点图片的时候,各种情况处理的方法不一致,如果点击节点,其有下级节点的时候,很好处理,就只需要在其OnExpended事件和OnCollapsed事件中,判断当前Node的ImageIndex然后进行更改处理就OK了,但是有一点,在加载树型菜单的时候,一定要给每个节点设置初始的节点图片,如:
    Node.ImageIndex := 1;
    Node.SelectedIndex := 1;
然后在OnExpended事件和OnCollapsed事件中进行处理,如:
  //设置节点图标状态
  if Node.ImageIndex = 1 then
  begin
    Node.ImageIndex := 0;
    Node.SelectedIndex := 0;
  end;
在此自己随意判断处理就OK了。

但是如果TTreeView控件没有展开节点,当然也就没有收缩了,每个节点都是根节点。那么以上两个事件就不起作用了。就只能是在OnClick事件中进行图片的更换问题,可是在Click事件中写好代码之后,问题又出现了,在点击节点时,第一次不会改变图片,当第二次点击的时候,才会改变状态,好像每个节点要激活一样。
想了想,可能是因为节点还不知道另一种图片的状态,然后就在树型菜单加载的时候,把所有的图片都给节点设置了一次,最后设置成初始图片,误打误撞的,问题就这样解决了,害得我调了半天!!!
我在加载树型菜单时这样写:
        //设置树型菜单目录图标
        ATreeNode.ImageIndex := 1;
        ATreeNode.SelectedIndex := 1;
        ATreeNode.ImageIndex := 0;
        ATreeNode.SelectedIndex := 0;
总之,把节点有的状态都加载了一遍,最后设置成初始状态。
在Click事件中这样写:
    CurTreeNode := tvTest.Selected;   
    if CurTreeNode <> OldTreeNode then//判断当前节点是否是前一节点
    begin
      OldTreeNode.ImageIndex := 0;
      OldTreeNode.SelectedIndex := 0; //设置前一选中节点图片 

      CurTreeNode.ImageIndex := 1;
      CurTreeNode.SelectedIndex := 1; //设置当前选中节点图片

      OldTreeNode := CurTreeNode;//将当前节点设置成前一节点
    end;
这样点击就正常了。

这篇关于终于解决了TTreeView中Node更换图片的问题(Delphi)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867

相关文章

SpringBoot项目jar依赖问题报错解析

《SpringBoot项目jar依赖问题报错解析》本文主要介绍了SpringBoot项目中常见的依赖错误类型、报错内容及解决方法,依赖冲突包括类找不到、方法找不到、类型转换异常等,本文给大家介绍的非常... 目录常见依赖错误类型及报错内容1. 依赖冲突类错误(1) ClassNotFoundExceptio

python循环引用和解决过程

《python循环引用和解决过程》文章讨论了在Python中解决循环引用问题的几种方法,包括延迟导入、使用`importlib`、重构代码和类型提示的前向引用,这些方法可以帮助开发者避免导入循环导致的... 目录模拟循环引用解决python循环引用的方法有几种,以下是一些常见的解决android方案常见问题

MybatisPlus 多数据源切换@DS注解失效问题解决

《MybatisPlus多数据源切换@DS注解失效问题解决》在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,下面就来介绍一下该问题的解决,感兴趣的可以... 在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,一个正

Centos7 firewall和docker冲突问题及解决过程

《Centos7firewall和docker冲突问题及解决过程》本文描述了一个在CentOS7上使用firewalld和Docker容器的问题,当firewalld启动或重启时,会从iptable... 目录系统环境问题描述问题排查解决办法总结本文只是我对问题的记录,只能用作参考,不能China编程说明问题,请

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?