(原創)WinForm中莫名其妙的小BUG——ComboBox 尺寸高度問題

leslie_xin發表於2021-11-09

一、前言

使用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的觸發條件,以及解決辦法,以供有人在遇到相同的問題時能找到解決辦法。畢竟我是在網上搜了好久都沒找到,才不得不自己去排查解決的。

相關文章