【发布时间】:2023-03-15 22:24:01
【问题描述】:
我需要实现的是, 显示带有组合框(包含所有时区)和组合框下方复选框的 UI。 仅当时区(选定的组合框项目)支持夏令时时才应显示该复选框。在呈现 UI 控件时,还要根据上次配置选中/取消选中复选框。
现在 C# 中的 TimeZoneInfo 类允许我获取时区列表(Combobox 的数据)。 但是 TimeZoneInfo 类中的 SupportsDayLightSaving 属性在 Checkbox 被选中时表示 true,在 没有复选框或 Checkbox 未选中时表示 false。
那么我如何通过 C# 确定,
1.时区是否支持夏令时(例如:印度标准时间不支持夏令时) 2.如果时区支持夏令时,是否启用夏令时(复选框被选中/取消选中)。
编辑: 如果我之前没有正确解释,这里是更详细的信息。 我想做什么:
- 显示/隐藏复选框(做出此决定的 if 条件是什么)
- 如果显示复选框,请选中/取消选中复选框(做出此决定的 if 条件是什么)。
PS:根据 MSDN SupportsDaylightSavingTime 属性,如果选中复选框,则值为 true,如果未选中复选框或时区不支持 DST,则值为 false。有了这个属性,如果值为 false,那么我无法确定是隐藏复选框还是显示它并取消选中复选框。 例如:对于印度标准时间,我不应该显示复选框,为此,如果我必须依赖属性值,那么我会将其设为 false,我可以将其隐藏。 但是考虑到我们有柏林时区(+1 UTC),使用控制面板设置未选中复选框,那么我会将属性值检索为 false 并应用上述逻辑将隐藏复选框,但在这里我想显示未选中状态的复选框。
使用答案编辑: 看起来我无法正确解释问题,对此我深表歉意。 经过长时间的谷歌搜索和搜索,我可以看到 .NET 没有提供 API 来支持我的需求。因此提出了一个解决方案,
检查 SupportsDaylightSavingsTime 属性是否为 true , if then 显示选中状态的复选框。如果上述属性值为 false ,则检查注册表中的 DynamicDaylightTimeDisabled 值 (HKLM\System\CurrentControlSet\Control\TimeZoneInformation) 。因为这里的 false 并不意味着时区不支持 DST,而是它也可以被禁用。如果值为 1 ,则显示未选中状态的复选框(因为它支持 DST 但目前已禁用)。如果值为 0 ,则不显示复选框。(因为时区不支持 DST)。
//get the time zone info for the currently selected time zone.
if (timeZoneInfo.SupportsDaylightSavingsTime)
{
//Show the checkbox.
//Mark the checkbox state as checked.
}
else
{
//doesnt mean that the timezone doesnt support DST.
int regValue;//Get the reg value of DynamicDaylightTimeDisabled in
//location HKLM\System\CurrentControlSet\Control\TimeZoneInformation\
if(regValue == 0)
{
//Donot show the checkbox.
}
if(regValue == 1)
{
//show the checkbox.
//Mark the checkbox state as unchecked.
}
}
【问题讨论】:
-
您使用的是 Windows-Form、WPF、ASP.NET?
-
它是一个 wpf 应用程序。但没关系,因为我解释 UI 只是为了理解。我的疑问是我需要用来检查我的两个条件的 API 是什么。 1.显示/隐藏复选框。 2.选中/取消选中复选框。