热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#高亮显示TreeView控件中的选中项

问题描述给自己单位开发的应用程序,里面有个功能是使用C#中的GDI功能开发的在固定区域显示指定内容。  最初实现起来很简单,因为显示内容的区域大小是固定

问题描述

  给自己单位开发的应用程序,里面有个功能是使用C#中的GDI+功能开发的在固定区域显示指定内容。
  最初实现起来很简单,因为显示内容的区域大小是固定的,要显示的内容的字体和字号也是固定的,直接使用Graphics类中的DrawString方法就可以搞定。效果如下图所示:

这里写图片描述
  用户使用这个模块已经有一段时间了。最近突然提出来在这个区域中显示的内容要加长,这样的话再使用固定的字体绘制要显示的内容就显示不下了,效果图如下,本来要显示九个字,结果只显示了四个字出来。
这里写图片描述
  因此需要找方法能够在固定区域内显示所有的内容。

解决方案一:自动调整字体大小

  字体太大就把字体变小,字体小了,固定区域里面显示的内容自然而然就多了。这是我一开始的想法。但是如何能够把字体调整的比较合适的?
  Graphics类中有个MeasureString函数,其中有一个重载函数的形式如下:

public SizeF MeasureString(string text,Font font
)

   该函数输入指定的字体大小已经要绘制的内容,然后返回绘制该内容所需的最小区域尺寸。因此可以通过不断微调字体的大小,通过不断测量用调整后的字体绘制内容所需的宽度是否小于等于固定区域的宽度,判断调整后的字体是否合适,示例代码如下:

float fontSize = ORIGINAL_FONT_SIZE;Font f = new Font(FONT_NAME, ORIGINAL_FONT_SIZE);float contentWidth = g.MeasureString(content, f).Width;while ((contentWidth > m_rect.Width)){f.Dispose();fontSize-=FONT_SIZE_CHANGE_STEP;f = new Font(FONT_NAME, fontSize);contentWidth = g.MeasureString(content, f).Width;}g.DrawString(content, f, Brushes.Blue, m_rect);f.Dispose();

  该段代码的效果图如下:
这里写图片描述
  这种方法的缺点就是字体变窄的同时,字体高度也跟着变小了,如果绘制的内容特别多,那字体会别的特别小,虽然画是能够画下了,但是根本看不清楚内容。

解决方案二:图片缩放

 &emsp用户提的意见是最好字体高度不变,宽度变窄,这样就可以在固定区域内装下更多的内容了。但是C#里面没有什么字体是可以只变宽度不变高度(搜了一顿没有搜到),后来还是通过百度,看到有人提的将字体内容变成图片后进行缩放的做法,这种应该能够满足我的需要。

这里写图片描述

示例代码地址:https://github.com/guochao2299/TextAutoSize


推荐阅读
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • Webdriver中元素定位的多种技术与策略
    在Webdriver中,元素定位是自动化测试的关键环节。本文详细介绍了8种常用的元素定位技术与策略,包括ID、名称、标签名、类名、链接文本、部分链接文本、XPath和CSS选择器。每种方法都有其独特的优势和适用场景,通过合理选择和组合使用,可以显著提高测试脚本的稳定性和效率。此外,文章还探讨了在复杂页面结构中如何灵活运用这些定位技术,以应对各种挑战。 ... [详细]
  • 百度飞桨图像分割课程笔记14:全景分割技术详解——PanopticDeepLab(CVPR 2019)
    Panoptic-DeepLab 是一种自底向上的全景分割方法,无需预先进行目标检测。该模型在 CVPR 2019 上提出,以其简洁、强大且快速的特点成为全景分割任务的基准。通过高效地结合实例分割和语义分割,Panoptic-DeepLab 能够准确地识别和区分图像中的每个对象和背景区域,为复杂的场景提供全面的分割结果。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 在C#编程中,设计流畅的用户界面是一项重要的任务。本文分享了实现Fluent界面设计的技巧与方法,特别是通过编写领域特定语言(DSL)来简化字符串操作。我们探讨了如何在不使用`+`符号的情况下,通过方法链式调用来组合字符串,从而提高代码的可读性和维护性。文章还介绍了如何利用静态方法和扩展方法来实现这一目标,并提供了一些实用的示例代码。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
author-avatar
中国地产人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有