C #. Тот же код работает только на 1 этикетке ... почему? - PullRequest
2 голосов
/ 23 мая 2011

Я сделал 2 радиокнопки, чтобы пользователь мог выбрать, хочет ли он / она просматривать время в 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 ... как я могу это сделать?

UPDATE

На самом деле, я заметил что-то странное ... в первый раз, когда я попробовал код, я сделал это только на lblUkr, и он работал, затем я изменил положение переключателей, поставил 24-часовую сверху и сделал это уже выбран, но когда я отлаживаю, он отключается, и ни один не выбран ... Я предполагаю, что каким-то образом, когда он отлаживает, он не обновляет информацию о том, что я делаю в приложении ... какие-либо идеи, что может быть не так?

ОБНОВЛЕНИЕ 2

Теперь это работает, мне пришлось заново сохранить проект и изменить некоторые вещи и все, и теперь все работает, но все же, нет текста AM, PM на конце часов, нужно ли это делать сам или есть код к нему?

Ответы [ 4 ]

3 голосов
/ 23 мая 2011

У меня нормально работает.Не уверен, в чем проблема.

Убедитесь, что вы действительно запустили свой таймер, и что вы связали свой код для запуска на событии 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-часовые часы.Это то, что вы описали, так что код в порядке.

Может быть, вам следует установить точку останова и проверить переменные / посмотреть, сколько раз ваш код вызывается через отладчик ...

1 голос
/ 23 мая 2011
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

Итак, вы используете правильный формат, но попробуйтечтобы все было так в стиле ООП:)

1 голос
/ 23 мая 2011

Код, который вы разместили, должен работать.Попробуйте вызвать .Invalidate() или .Refresh() для каждой из меток, чтобы убедиться, что они перерисованы.Кроме того, я предполагаю, что вы используете System.Windows.Forms.Timer, поэтому нет доступа к управлению несколькими потоками, верно?

0 голосов
/ 23 мая 2011

Проверьте формат, H для 24-часового формата, h для 12 часов.

и 'tt' для AM или PM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...