簡體   English   中英

C#。 相同的代碼只能在1個標簽上使用...為什么?

[英]C#. The same code only works on 1 label… why?

我做了兩個單選按鈕,以便用戶可以選擇是否要以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 ...我該怎么做?

UPDATE

實際上,我注意到了一些奇怪的東西...第一次嘗試僅在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, 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”表示上午或下午。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM