如何解决C#相同的代码只能在1个标签上使用...为什么?
| 我做了两个单选按钮,以便用户可以选择是否要以24h或12h格式查看时间,这是我在计时器上的代码:var format = rad24h.Checked ? \"HH:mm\" : \"hh:mm:ss tt\";
timer1.Interval = 500;
DateTime myDateTime = DateTime.Now;
label1.Text = string.Format(\"Hora actual {0}\\n \",myDateTime.ToString(format));
lblHK.Text = string.Format(\"Hong Kong {0}\\n \",myDateTime.AddHours(7).ToString(format));
lblNY.Text = string.Format(\"Nova Iorque {0}\\n \",myDateTime.AddHours(-5).ToString(format));
lblUkr.Text = string.Format(\"Ucrânia {0}\\n\",myDateTime.AddHours(2).ToString(format));
lblTay.Text = string.Format(\"Taymyrskiy {0}\\n \",myDateTime.AddHours(3).ToString(format));
lblAla.Text = string.Format(\" Alaska {0}\\n\",myDateTime.AddHours(-9).ToLongString(format));
lblUru.Text = string.Format(\"Uruguay {0}\\n\",myDateTime.AddHours(-4).ToString(format));
lblSyd.Text = string.Format(\" Sydney {0}\\n\",myDateTime.AddHours(9).ToString(format));
lblMad.Text = string.Format(\"Madagascar {0}\\n \",myDateTime.AddHours(2).ToString(format));
唯一适用于此功能的标签是lblUkr,(自上而下排名第四)...
我检查了其他所有行,以确保它们相同,我想念的是什么?
另外,标签上没有显示AM / PM ...我该怎么做?
更新
实际上,我注意到了一些奇怪的东西...第一次尝试仅在lblUkr上执行此代码时,它就起作用了,然后我更改了单选按钮的位置,将24h放在顶部,并使其已经被选中,但是当我调试它失败并且什么都没选择时...我以某种方式认为,当它调试时,它不会更新我在应用程序上所做的事情...有什么主意吗?
更新2
现在它确实起作用了,我不得不重新保存该项目并更改了一些东西,所有事情现在都可以起作用,但是仍然没有时钟末尾的AM,PM文本,我需要自己完成还是有代码吗?
解决方法
对我来说很好。不确定是什么问题。
确保您确实启动了计时器,并且已将代码绑定为在
Tick
事件上运行...
为了检查它是否“工作正常”,我将样本转换为如下形式:
var format = false ? \"HH:mm\" : \"hh:mm:ss tt\";
DateTime myDateTime = DateTime.Now;
Console.WriteLine(string.Format(\"Hora actual {0}\\n \",myDateTime.ToString(format)));
Console.WriteLine(string.Format(\"Hong Kong {0}\\n \",myDateTime.AddHours(7).ToString(format)));
Console.WriteLine(string.Format(\"Nova Iorque {0}\\n \",myDateTime.AddHours(-5).ToString(format)));
Console.WriteLine(string.Format(\"Ucrânia {0}\\n\",myDateTime.AddHours(2).ToString(format)));
Console.WriteLine(string.Format(\"Taymyrskiy {0}\\n \",myDateTime.AddHours(3).ToString(format)));
Console.WriteLine(string.Format(\" Alaska {0}\\n\",myDateTime.AddHours(-9).ToString(format)));
Console.WriteLine(string.Format(\"Uruguay {0}\\n\",myDateTime.AddHours(-4).ToString(format)));
Console.WriteLine(string.Format(\" Sydney {0}\\n\",myDateTime.AddHours(9).ToString(format)));
Console.WriteLine(string.Format(\"Madagascar {0}\\n \",myDateTime.AddHours(2).ToString(format)));
当您将var format = false ...
更改为var format = true ...
时,它将从12小时制切换为24小时制。这就是您描述的内容,因此代码很好。
也许您应该设置一个断点并检查变量/查看通过调试器调用代码的次数...
,您发布的代码应该可以工作。尝试为每个标签呼叫.Invalidate()
或.Refresh()
,以确保它们被重新绘制。另外,我假设您使用的是System.Windows.Forms.Timer
,所以没有跨线程控制访问权限,对吗?
,DateTime date1;
date1 = new DateTime(2008,1,18,9,1);
Console.WriteLine(date1.ToString(\"hh:mm:ss tt\",CultureInfo.InvariantCulture));
// Displays 06:09:01 PM
而且您也可以使用自己国家的文化
Console.WriteLine(date1.ToString(\"hh:mm:ss tt\",CultureInfo.CreateSpecificCulture(\"hu-HU\")));
// Displays 06:09:01 du.
-来自MSDN
因此,您使用的是正确的格式,但请尝试以OOP样式使其类似:)
,检查格式,H为24小时格式,h为12小时。
和\“ tt \”表示上午或下午。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。