C#.相同的代码仅适用于1个标签..为什么?



我制作了两个单选按钮,这样用户就可以选择是24小时格式还是12小时格式查看时间,这是我在计时器上的代码:

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上做了它,它正在工作,然后我改变了单选按钮的位置,把24小时按钮放在上面,并使它已经被选中,但当我调试时,它会下降,没有被选中。。。我认为,不知何故,当它进行调试时,它不会更新我在应用程序上所做的事情。。。有什么想法吗?

更新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, 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"表示AM或PM。

相关内容

  • 没有找到相关文章

最新更新