为啥 MonthCalendar 在 3rd 方应用程序中看起来不同?
Posted
技术标签:
【中文标题】为啥 MonthCalendar 在 3rd 方应用程序中看起来不同?【英文标题】:Why does MonthCalendar look different in 3rd party app?为什么 MonthCalendar 在 3rd 方应用程序中看起来不同? 【发布时间】:2011-01-19 17:39:37 【问题描述】:我目前正在为第 3 方应用程序开发插件 dll。我的 dll 的一部分包括一个弹出窗口,其中包含 System.Windows.Forms.MonthCalendar
。现在,当我在 Visual Studio 中处理它并使用我编写的测试应用程序打开弹出窗口时,它看起来是一种方式,但是当第 3 方应用程序打开它时,它看起来就不同了。除了看起来不同之外,他们还有不同的行为。有谁知道为什么?我认为可能是一个问题的一件事是我的 dll 是用 .Net 3.5 构建的,而第 3 方应用程序是 .Net 2.0(我认为)。但是当我将我的测试应用程序构建为 .Net 2.0 时,它仍然以相同的方式工作。
这就是我所期待的:
这就是我得到的:
【问题讨论】:
【参考方案1】:第 3 方应用程序未启用视觉样式,因此转而使用经典的 Windows UI 主题。请注意,按钮和组合框看起来也不一样。您必须在第 3 方应用程序中启用视觉样式才能将当前的 Windows 主题应用到它。
(作为练习,尝试将您的 Windows 首选项切换为使用经典主题,然后查看正在运行的测试应用程序 - 它应该与第 3 方应用程序相同。)
【讨论】:
那么当从 3rd 方应用程序调用时,有没有办法强制我的弹出窗口使用经典的 Windows UI 主题? 可能,但我不会强求。您的控件的设计应使其在给定任何特定 UI 主题的情况下都能正常工作。您似乎已将其设计为仅适用于 Vista/7 主题。考虑使用自动调整大小的表格布局而不是 X、Y 布局,并使用尽可能多的主题进行测试(在合理范围内)。 是的,从我的测试应用程序中删除Application.EnableVisualStyles()
确实会产生与第 3 方应用程序相同的结果。现在看看我是否可以为 3rd 方应用打开它。
你可以试试。但重申一下我的观点:如果控件依赖于要启用的特定 UI 主题,那么 该控件将被破坏。
老实说,我并不关心控件的“外观”,但我确实关心似乎会随着主题而改变的功能。而且我不想显示最小/最大日期范围之外的日期。以上是关于为啥 MonthCalendar 在 3rd 方应用程序中看起来不同?的主要内容,如果未能解决你的问题,请参考以下文章
同步 MonthCalendar 和 Datetimepicker
如何使 MonthCalendar 在放大时仅显示单个月份? [复制]