【发布时间】:2012-04-23 11:26:32
【问题描述】:
我正在创建一个自定义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 按钮。
感谢您的时间和帮助。
【问题讨论】:
标签: c# winforms combobox textbox custom-controls