0

我正在创建一个ComboBox允许用户选择日期的自定义;日历显示是本地化的,使得内置的DateTimePicker不受欢迎[更多信息请参见此处]。我需要 UI 控件来反映外观或现有组件。这是我尝试过的和遇到的问题:

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

是否存在获得我需要的行为的现有机制:aTextBox显示带有下拉箭头按钮的选定日期,单击该按钮时会显示日历 UI 选择组件。日历组件已经存在,并且按钮必须看起来像现有的 Windows 98 外观ComboBox按钮。

感谢您的时间和帮助。

4

1 回答 1

0

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

于 2012-05-10T10:44:41.443 回答