【问题标题】:Custom DateTimePicker: getting a consistent look and feel自定义 DateTimePicker:获得一致的外观和感觉
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2011-03-10
      • 2021-12-16
      • 2023-03-04
      • 2011-02-03
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多