使用 EnableVisualStyles 的 MonthCalendar 控件选择范围?
我正在使用 MonthCalendar 控件,并希望以编程方式选择日期范围。 当我这样做时,如果调用了 Application.EnableVisualStyles()
,控件将无法正确绘制。 根据 MSDN,这是一个已知问题。
将 MonthCalendar 与视觉效果结合使用 启用样式将导致选择 MonthCalendar 控件的范围为 没有正确绘画 (来自:http://msdn.microsoft.com /en-us/library/system.windows.forms.monthcalendar.aspx)
除了不调用EnableVisualStyles
之外,真的没有其他解决办法吗? 从我的角度来看,这似乎使得该特定控件对于一系列应用程序完全无用,并且是相当明显的疏忽。
I'm using the MonthCalendar control and want to programmatically select a date range. When I do so the control doesn't paint properly if Application.EnableVisualStyles()
has been called. This is a known issue according to MSDN.
Using the MonthCalendar with visual
styles enabled will cause a selection
range for the MonthCalendar control to
not paint correctly
(from: http://msdn.microsoft.com/en-us/library/system.windows.forms.monthcalendar.aspx)
Is there really no fix for this other than not calling EnableVisualStyles
? This seems to make that particular control entirely useless for a range of applications and a rather glaring oversight from my perspective.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以尝试此代码:
有关更多信息:
http://www.authorcode.com/how-to-select-a-range-of-dates-in-the-monthcalendar-control/
http://www.authorcode.com/how-to-enable-windows- xp-视觉样式-of-net-application/
you can try this code:
for more information:
http://www.authorcode.com/how-to-select-a-range-of-dates-in-the-monthcalendar-control/
http://www.authorcode.com/how-to-enable-windows-xp-visual-styles-of-net-application/
我在上面的 Mark Cranness 代码中发现了一个小问题:在完全禁用视觉样式的 XP 系统上,即使调用 Application.EnableVisualStyles(),Application.RenderWithVisualStyles 也会设置为 False。
因此,在这种情况下,自定义绘制代码根本不会运行。 为了解决这个问题,我将 FixVisualStylesMonthCalendar 构造函数的第一行更改为
整个代码位于此答案的底部。
我找不到任何方式来评论答案本身。 以下代码的学分归原作者所有 - (如果他或任何人可以验证此答案并更新它,我很乐意删除此答案)
I found a small problem in Mark Cranness's code above: On XP systems that have visual styles disabled entirely, Application.RenderWithVisualStyles is then set to False even when Application.EnableVisualStyles() is called.
So the custom paint code does not run at all in that case. To fix it, I changed the first line of the FixVisualStylesMonthCalendar constructor to
Entire code is at the bottom of this answer.
I could not find any way to comment on the answer itself. Credits for below code go to the original author - (If he or anyone can verify this answer and update it I would be happy to remove this one)
这是一个在显示超过一个月时有效的版本 (CalendarDimensions != (1,1)),并且还修复了一些其他问题:
我的测试表明 Windows 7 没有绘画问题,我希望也没有Vista,因此这仅尝试修复 Windows XP。
Here is a version that does work when more than one month is displayed (CalendarDimensions != (1,1)), and fixes some other problems also:
My testing shows that Windows 7 does not have the painting problem and I expect that neither does Vista, so this only attempts a fix for Windows XP.
在寻找同一问题的解决方案时,我第一次在这里遇到这个问题,但后来我发现了 尼克·安德森。 我发现这非常有帮助。
这是我根据尼克的例子所做的:
While looking for a solution to the same problem, I first encountered this question here, but later I discovered a blog entry by Nicke Andersson. which I found very helpful.
Here is what I made of Nicke's example: