我正在创建一个允许用户选择日期的自定义ComboBox
;日历显示已本地化,使内置DateTimePicker
不受欢迎[有关详细信息,请参阅here]。我需要UI控件来镜像外观或现有组件。这是我尝试过的以及遇到的问题:
TextBox
按钮的ComboBox
:我尝试使用ComboBoxRenderer.DrawDropDownButton
,但外观并不反映现有的UI控件。特别是我们没有Application.EnableVisualStyles()
所以按钮具有Windows 98外观。 ComboBoxRenderer
绘制一个有光泽的灰色按钮。ComboBox
和ToolStripDropDown
包含日历控件:按钮具有正确的外观,但我无法完全隐藏下拉框。尽管ToolStripControlHost
实际上隐藏了下拉框,但当我单击按钮时,我可以看到在显示ToolStripDropDown
之前呈现的下拉框。我已经尝试过有效地禁用下拉框的解决方法,但是正如您所期望的那样,按钮不能保持所需的视觉状态(按下按钮会使我回到上述问题中)。
在OnMeasureItem
中将下拉框的高度设置为零不起作用;虽然我想我可以使下拉框与我的日历UI选择器的高度相同,这样渲染看起来并不是特别糟糕。是否存在获取我需要的行为的现有机制:TextBox
使用下拉箭头按钮显示所选日期,单击该按钮时,将显示日历UI选择组件。日历组件已存在,按钮必须类似于现有的Windows 98外观ComboBox
按钮。
感谢您的时间和帮助。
答案 0 :(得分:0)
我无法找到明确的解决方案,所以我实施了一个解决方法:我已经在正常和按下了按下了Windows 98样式按钮的屏幕截图 state(没有悬停状态)并将它们添加为图像资源(在 resx 文件中)。然后我根据当前用户交互绘制图像。这有几个结果,包括:视觉样式的任何更改都不会是无缝的,如果更改控件高度,按钮将不会像其他ComboBox
实例一样调整大小。