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 \”表示上午或下午。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...