自定义DateTimePicker:获得一致的外观

时间:2012-04-23 11:26:32

标签: c# winforms combobox textbox custom-controls

我正在创建一个允许用户选择日期的自定义ComboBox;日历显示已本地化,使内置DateTimePicker不受欢迎[有关详细信息,请参阅here]。我需要UI控件来镜像外观或现有组件。这是我尝试过的以及遇到的问题:

  • 使用带有TextBox按钮的ComboBox:我尝试使用ComboBoxRenderer.DrawDropDownButton,但外观并不反映现有的UI控件。特别是我们没有Application.EnableVisualStyles()所以按钮具有Windows 98外观。 ComboBoxRenderer绘制一个有光泽的灰色按钮。
  • 使用ComboBoxToolStripDropDown包含日历控件:按钮具有正确的外观,但我无法完全隐藏下拉框。尽管ToolStripControlHost实际上隐藏了下拉框,但当我单击按钮时,我可以看到在显示ToolStripDropDown之前呈现的下拉框。我已经尝试过有效地禁用下拉框的解决方法,但是正如您所期望的那样,按钮不能保持所需的视觉状态(按下按钮会使我回到上述问题中)。 在OnMeasureItem中将下拉框的高度设置为零不起作用;虽然我想我可以使下拉框与我的日历UI选择器的高度相同,这样渲染看起来并不是特别糟糕。

是否存在获取我需要的行为的现有机制:TextBox使用下拉箭头按钮显示所选日期,单击该按钮时,将显示日历UI选择组件。日历组件已存在,按钮必须类似于现有的Windows 98外观ComboBox按钮。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

我无法找到明确的解决方案,所以我实施了一个解决方法:我已经在正常按下了按下了Windows 98样式按钮的屏幕截图 state(没有悬停状态)并将它们添加为图像资源(在 resx 文件中)。然后我根据当前用户交互绘制图像。这有几个结果,包括:视觉样式的任何更改都不会是无缝的,如果更改控件高度,按钮将不会像其他ComboBox实例一样调整大小。