我想将DateTimePicker的时间格式设置为24小时。
我使用了下面的代码,时间实际上更改为24小时。
现在的问题是,当设备使用阿拉伯地区或英语地区时,日期格式会呈现不理想的形状。
我希望无论设备的区域如何不同,日期的方向都不会改变。
我希望日期的方向是小时、分钟和AM/PM,如图所示,而不考虑时区。
我的代码:
If Thread.CurrentThread.CurrentCulture.DisplayName.Contains("arab".ToLower) Then
ROSYUPDATE_F.DateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom
ROSYUPDATE_F.DateTimePicker.CustomFormat = "HH:mm tt"
Else
ROSYUPDATE_F.DateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom
ROSYUPDATE_F.DateTimePicker.CustomFormat = " tt mm:HH"
End If
将时间从所需格式更改为其他格式的动画
1条答案
按热度按时间ggazkfy81#
更改区域设置时,
Thread.CurrentThread.CurrentCulture
或(CultureInfo.CurrentCulture
)不会 * 自动 * 更新。您可以调用CultureInfo.ClearCachedData()来重置内部
CultureData
存储的设置并重新加载 fresh 值。要在用户设置更改时更新UI,您可以处理系统在这些设置更改时发送的通知。
确认这些通知的一个简单方法是处理WM_SETTINGCHANGE消息,该消息在系统设置中的 * 某些内容 * 发生更改时发送到所有顶级Windows。
这些通知有些 * 通用 *(阅读文档),但是通过检查
WParam
和LParam
值,您可以大致了解发生了什么变化。覆写表单中的
WndProc
以行程WM_SETTINGCHANGE
消息。当您得到一个,验证哪些设置已更改,并根据此信息采取行动。
在这种情况下,当区域(用户)设置更改时,
WParam
将设置为0
,并且LParam
指向读取"intl"
的字符串。然后,如果语言是RTL(或非特定的阿拉伯语-使用
CultureInfo.GetCultureInfo("AR")
得到的语言),则设置自定义格式,否则可以设置默认的ShortTimePattern
或其他格式。(假设DateTimePicker控件命名为
DateTimePicker1
)次要:
由于您的自定义格式 * 并非完全标准 *,因此在首次加载表单时,您可能会有不同的行为,具体取决于运行应用程序的计算机的当前区域设置。
您可以发送一条
WM_SETTINGCHANGE
消息给 * 您自己 *,并按照说明设置WParam
和LParam
,这样您就可以在启动时 * 自动 * 更新和格式化DateTimePicker。在
Form.Load
(或OnLoad()
、OnShown()
或OnHandleCreated()
)中,您可以添加:SendMessage声明: