Windows 10 Creators Update 后 DateTimePicker 出现乱码
DateTimePicker garbled after Windows 10 Creators Update
使用 VS 2015、C#、Winforms 构建的应用程序,使用 DateTimePicker Windows 控件,将计算机更新到 Windows Creators Update 后文本出现乱码。
有没有其他人遇到过这个问题或者有任何建议的解决方法?
你有高 DPI 显示器吗?即使您不这样做,更新后的 dpi 缩放比例也很有可能出现问题。如果是这样,您可以 "fix" 只需在项目的清单文件的 dpiAware
和 dpiAwareness
值中设置一个值,如下所述:
High-DPI Scaling Improvements for Desktop Applications in the Windows 10 Creators Update
我自己还没有这样做过,所以现在我只能告诉你去哪里看,而不是告诉你正确的价值观应该是什么。
即使这不是您的问题,您也可能需要花几分钟时间检查您的应用在高 DPI 情况下是否处理良好。这也是让您的公司给您买一台漂亮的新显示器的好借口:)
因此,我们最终删除了清单文件,控件现在可以正确呈现。
奇怪的是,包含一个新清单文件的事实仅包含一个带有版本和名称的 assemblyIdentity 标记,导致此 windows 控件崩溃。
我意识到对于其他人来说,删除清单可能不是一种选择,但是,这已经解决了我们的问题。
我今天也遇到了。我的日期时间选择器呈现得非常随机,但绝不可接受。我将此作为一种解决方法:
我的环境是VS2015、.net 3.5和winforms
我的设置是 Surface Pro 3,配备新的 docker 和 2 个分辨率为 2560x1440 且缩放比例为 100% 的外接显示器。
将 app.manifest 添加到我的项目中,因为我以前没有。
将 dpiAware 添加到 app.manifest 成为这样的系统:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/System</dpiAware>
</windowsSettings>
</application>
我还在我的表单上将 AutoScaleMode 设置为 None(但使用 Inherited 得到的结果大致相同)。
dpiAware 似乎有所帮助(但不是 100% 稳定)。这在 运行 编译的应用程序时有效,但在从 Visual Studio 调试时无效。然后我只得到一个句点 (.) 这是我的日期分隔符号。
sample of datetimepicker after updating to creators update
after applying workaround when running compiled exe
如果无法将应用程序更新到 .net 4.7,这会有点帮助
我们收到了完全相同的问题。 VB.NET 对比 2012.NET 4.5。日期时间选择器搞砸了。我也在
上发布了这个
启用 XP 视觉样式为我解决了这个问题。
我尝试了此处和其他地方的大部分建议,包括清单更改、.NET 4.7 等。但是,我的设置中需要进行的一项额外更改是增加控件本身的 CalendarFont 大小。
我系统的默认值是 7.875。将其更改为 10pt 更正了显示问题(将其更改为稍低的值改善了显示但没有更正)。
免责声明:这尚未经过深入测试,可能会破坏其他场景。此信息旨在帮助找到最终解决方案。
在显示包含 DateTimePicker 的表单之前,在 WinForms 应用程序中启用视觉样式。
Application.EnableVisualStyles();
//Form1 contains the DateTimePicker component
Application.Run(new Form1());
正如其他人所建议的那样,将这一行添加到您的主表单中并且对我有用:
Application.EnableVisualStyles()
您也可以取消注释 app.manifest
底部的行。这取决于项目。
所以 Windows10 1703 引入了一些新的挑战,其中包括奇怪的拒绝在 DateTimePicker 控件中显示日期,除非您勾选应用程序的 "Enable XP visual style" 框(或执行此操作以编程方式)。此调整确实解决了日期再现问题,但现在其他控件(例如下拉框、下拉列表文本框和按钮)变得单调乏味。不好。我们确实需要的是一个真正的修复程序,它使 "XP visual style" 变得不必要,或者 Windows 表单编程即将过时,因此支持起来没有意义?
此问题的修复计划包含在 Windows10 的 6 月累积更新中。
这是 COMCTL32.DLL 版本 5 中实现的日期时间选择器控件中的错误。不久的将来应该会修复此问题。
COMCTL32.DLL 版本 6 中实现的日期时间选择器控件似乎不受此问题的影响。
Windows10 的 6 月累积更新 (KB 4022725) 包括更新的 COMCTL32.DLL,其中包含针对此问题的修复。安装更新后文件版本应为 5.82.15063.413。
使用 VS 2015、C#、Winforms 构建的应用程序,使用 DateTimePicker Windows 控件,将计算机更新到 Windows Creators Update 后文本出现乱码。
有没有其他人遇到过这个问题或者有任何建议的解决方法?
你有高 DPI 显示器吗?即使您不这样做,更新后的 dpi 缩放比例也很有可能出现问题。如果是这样,您可以 "fix" 只需在项目的清单文件的 dpiAware
和 dpiAwareness
值中设置一个值,如下所述:
High-DPI Scaling Improvements for Desktop Applications in the Windows 10 Creators Update
我自己还没有这样做过,所以现在我只能告诉你去哪里看,而不是告诉你正确的价值观应该是什么。
即使这不是您的问题,您也可能需要花几分钟时间检查您的应用在高 DPI 情况下是否处理良好。这也是让您的公司给您买一台漂亮的新显示器的好借口:)
因此,我们最终删除了清单文件,控件现在可以正确呈现。 奇怪的是,包含一个新清单文件的事实仅包含一个带有版本和名称的 assemblyIdentity 标记,导致此 windows 控件崩溃。 我意识到对于其他人来说,删除清单可能不是一种选择,但是,这已经解决了我们的问题。
我今天也遇到了。我的日期时间选择器呈现得非常随机,但绝不可接受。我将此作为一种解决方法: 我的环境是VS2015、.net 3.5和winforms 我的设置是 Surface Pro 3,配备新的 docker 和 2 个分辨率为 2560x1440 且缩放比例为 100% 的外接显示器。 将 app.manifest 添加到我的项目中,因为我以前没有。 将 dpiAware 添加到 app.manifest 成为这样的系统:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/System</dpiAware>
</windowsSettings>
</application>
我还在我的表单上将 AutoScaleMode 设置为 None(但使用 Inherited 得到的结果大致相同)。 dpiAware 似乎有所帮助(但不是 100% 稳定)。这在 运行 编译的应用程序时有效,但在从 Visual Studio 调试时无效。然后我只得到一个句点 (.) 这是我的日期分隔符号。
sample of datetimepicker after updating to creators update after applying workaround when running compiled exe
如果无法将应用程序更新到 .net 4.7,这会有点帮助
我们收到了完全相同的问题。 VB.NET 对比 2012.NET 4.5。日期时间选择器搞砸了。我也在
上发布了这个启用 XP 视觉样式为我解决了这个问题。
我尝试了此处和其他地方的大部分建议,包括清单更改、.NET 4.7 等。但是,我的设置中需要进行的一项额外更改是增加控件本身的 CalendarFont 大小。
我系统的默认值是 7.875。将其更改为 10pt 更正了显示问题(将其更改为稍低的值改善了显示但没有更正)。
免责声明:这尚未经过深入测试,可能会破坏其他场景。此信息旨在帮助找到最终解决方案。
在显示包含 DateTimePicker 的表单之前,在 WinForms 应用程序中启用视觉样式。
Application.EnableVisualStyles();
//Form1 contains the DateTimePicker component
Application.Run(new Form1());
正如其他人所建议的那样,将这一行添加到您的主表单中并且对我有用:
Application.EnableVisualStyles()
您也可以取消注释 app.manifest
底部的行。这取决于项目。
所以 Windows10 1703 引入了一些新的挑战,其中包括奇怪的拒绝在 DateTimePicker 控件中显示日期,除非您勾选应用程序的 "Enable XP visual style" 框(或执行此操作以编程方式)。此调整确实解决了日期再现问题,但现在其他控件(例如下拉框、下拉列表文本框和按钮)变得单调乏味。不好。我们确实需要的是一个真正的修复程序,它使 "XP visual style" 变得不必要,或者 Windows 表单编程即将过时,因此支持起来没有意义?
此问题的修复计划包含在 Windows10 的 6 月累积更新中。
这是 COMCTL32.DLL 版本 5 中实现的日期时间选择器控件中的错误。不久的将来应该会修复此问题。
COMCTL32.DLL 版本 6 中实现的日期时间选择器控件似乎不受此问题的影响。
Windows10 的 6 月累积更新 (KB 4022725) 包括更新的 COMCTL32.DLL,其中包含针对此问题的修复。安装更新后文件版本应为 5.82.15063.413。