• (原创)WinForm中莫名其妙的小BUG——ComboBox 尺寸高度问题


    一、前言

    使用WinForm很久了,多多少少遇到一些小BUG。
    这些小BUG影响并不严重,而且只要稍微设置一下就能正常使用,所以微软也一直没有修复这些小BUG。
    本来并不足以写篇文章去记录,但是昨天遇到了一个新的小BUG,让我提起了兴趣去记录。
    本篇文章只是记录BUG现象,及解决办法,并不会分析BUG产生的原理。

    相信看完的你,一定会有所收获!

    本文地址:https://www.cnblogs.com/lesliexin/p/15527747.html

    二、BUG现象描述

    在窗体的构造函数中,获取到的ComboBox高度不是设计器中显示的高度,而是默认的尺寸高度。
    1,设计器
    可以看到Size的高度是29。
    image

    2,代码
    在构造函数中获取ComboBox的尺寸。
    image

    3,运行
    可以看到,获取到的ComboBox的宽度是正确的,但是高度却不是29,而是20。
    image

    三、BUG触发条件

    1,未手动修改ComboxBox控件尺寸。
    2,ComboxBox的父窗体尺寸不是默认的“宋体,9pt”。(上面获取到的高度20,就是在默认的“宋体,9pt”下,ComboBox的高度)
    3,在构造函数中获取ComboxBox尺寸。

    四、解决办法

    破坏上面的触发条件的任意一环即可。
    如:手动重新设置ComboBox的尺寸;设置父窗体尺寸为“宋体,9pt”;不在构造函数中获取,而在Load事件中获取ComboBox尺寸等。

    五、结束语

    像这种触发条件比较苛刻的小BUG,遇到的人应该不多,而且解决起来也很简单,所以微软也重来没修复过。
    我之所以会遇到这个问题,是因为在为某个软件进行高DPI适配时,需要获取ComboBox控件的高度,用来定位和作整体尺寸计算,但是每次运行后就会发现尺寸和位置不对,找了好久,才找到是ComboxBox的原因。
    所以便通过一些测试,找出了这个Bug的触发条件,以及解决办法,以供有人在遇到相同的问题时能找到解决办法。毕竟我是在网上搜了好久都没找到,才不得不自己去排查解决的。

  • 相关阅读:
    C#中class的访问级别
    Install-Package 那点事儿
    Gherkin学习笔记
    mysql-connector-c 安装
    shell实现死循环
    每天一个小算法(6)---- 通过两个栈实现一个队列
    每天一个小算法(5)----找到链表倒数第K个结点
    每天一个小算法(4)----在O(1)时间删除指定结点
    每天一个小算法(3)----倒序打印链表
    每天一个小算法(2)----合并两个有序链表
  • 原文地址:https://www.cnblogs.com/lesliexin/p/15527747.html
Copyright © 2020-2023  润新知