c# - 可变大小所有者绘制 ComboBox;列表大小不正确

标签 c# .net winforms combobox

我从 ComboBox 派生了一个类,使它成为所有者绘制的列表框(DrawMode.OwnerDrawVariable 样式),并通过重写 OnMeasureItem 和 OnDrawItem 我将特殊项目添加到下拉列表(例如分隔符),它们属于比控件中的正常项目更小/更大。

现在,我遇到但似乎无法有效解决的问题是下拉列表的大小:下拉列表末尾有一个丑陋的空白区域。我以为我通过将 ComboBox 的 DropDownHeight 属性设置为所有项目高度的总和来解决这个问题,但这似乎并不总是有效。有时,在随机数量的项目上,厄运的空白区域会返回。这是一个不常见的问题,但希望是一个常见且易于修复的问题。

我怎样才能让 ComboBox 的下拉列表的大小精确到它里面的项目占用的大小?

最佳答案

我在 ComboBox.UpdateDropDownHeight() 方法中发现了一个非常愚蠢的错误。当 DropDownHeight 属性与默认值匹配时,它会计算自定义高度以使下拉列表适合项目数。即使您更改了 DrawMode,它也会这样做,这是完全错误的。

解决方法:

  int height = ...; // Your code here
  if (height == 106) ++height;
  comboBox1.DropDownHeight = height;

你会得到一个像素的间隙,你应该能够在你的 OnDrawItem() 重载中隐藏它。

关于c# - 可变大小所有者绘制 ComboBox;列表大小不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967185/

相关文章:

javascript - 使用 JavaScript 的 CheckBoxList 项目

c# - .NET HttpClient - 取消 CancellationToken 不取消请求

c# - csproj 根据操作系统复制文件

c# - 消息框出现两次 C#

c# - 为什么我的水平工具条一直垂直堆叠?

c# - WPF 将组合框绑定(bind)到 LINQ 填充的可观察集合

c# - 控制台应用程序在应该退出时显示 'Press any key to continue'

c# - 表达式树 - 如何声明实例?

c# - 线程安全类库设计

c# - 我如何绘制 X?