Обратный отсчет с датой и временем
[Моя идея: когда я изменяю переменную, она будет управляться датой-временем, но не зависеть от даты-времени.]
Таким образом, в принципе, DateTime будет считаться так, как ему заблагорассудится, но моя переменная будет поддерживать любые изменения в любое время, и отсчет от изменения будет установлен. Вверх или вниз.
Мне удалось сделать этот код для CountUp.И работает отлично, именно так, как я хотел, и Вы тоже можете попробовать, почувствовать это.
Теперь я изо всех сил пытаюсь сделать обратный отсчет...и у меня есть только некоторые идеи, но не полный путь, как это сделать в моем уме. Может быть, вы знаете решение. Я сделаю это в конце концов, но с вашей помощью, может быть, будет быстрее и лучше.
Что я уже пробовал:
public _Time() { } public void Reset() { StartTime = DateTime.Now; diference = new TimeSpan(h, m, s); int xa = 60; EndTime = new DateTime(9999, 01, 01, h * xa, m * xa, s * xa); } /// <summary> /// set or get this value /// </summary> public int h; /// <summary> /// set or get this value /// </summary> public int m; /// <summary> /// set or get this value /// </summary> public int s; DateTime StartTime; TimeSpan diference; TimeSpan elapsed; public void CountUp() { elapsed = DateTime.Now - StartTime + diference; //now update the values h = elapsed.Hours; m = elapsed.Minutes; s = elapsed.Seconds; } //TimeSpan unu = new TimeSpan(0, 0, 1); //int inch = 0; //int incm = 0; //int incs = 0; DateTime EndTime; public void CountDown() { //10s/10s = 0 // // // elapsed = EndTime.Subtract(DateTime.Now); //now update the values h = elapsed.Hours; m = elapsed.Minutes; s = elapsed.Seconds; }
И использовать его в форме 1:
public Form1() { InitializeComponent(); t = new Timer(); t.Tick += new EventHandler(t_Tick); t.Start(); //time.h = 6; //time.m = 59; //time.s = 55; time.Reset(); } Timer t; _Time time = new _Time(); void t_Tick(object sender, EventArgs e) { //time.CountUp(); time.CountDown(); label1.Text = time.h + ":"+time.m + ":" + time.s; }
Richard MacCutchan
Обратный отсчет-это полная противоположность CountUp. Поэтому вместо того, чтобы добавлять значения, вы бы вычитали их в каждый момент, когда время должно измениться.
_Q12_
хорошо, представьте работоспособный код.
и проверьте мой [public void CountDown ()], который я уже пробовал, внизу в коде.
Richard MacCutchan
Извините, но я здесь не для того, чтобы делать за вас вашу работу.
_Q12_
тогда этот вопрос не для вас :) Это не проблема.
Richard MacCutchan
Возможно, если бы вы действительно объяснили, что не работает, а не требовали решения, тогда люди смогли бы предложить свои предложения.
BillWoodruff
- о'Кей, представь работоспособный код.- плохое отношение !
phil.o
Когда я изменяю переменную, она будет управляться DateTime, но не зависеть от DateTime.
Что это значит?
_Q12_
с "elapsed = EndTime.Вычтите(DateTime.Now);" обратный отсчет идет хорошо, но... не так, как мне хотелось. Если я установил time.m = 30, то не начинаю отсчет с 30. Это моя проблема. Вот что я имею в виду, говоря об этой идее.
phil.o
В самом начале установите EndTime
к DateTime.Now.AddMinutes(30)
Затем на каждом шаге вы можете получить оставшееся время с помощью EndTime - DateTime.Now
. Вы также можете использовать Секундомер компонент, если вам нужно больше точности в ваших измерениях времени.
В любом случае я бы избавился от этого _Time
класс, который вы определили; он просто добавляет некоторую ненужную сложность к чему-то, что может быть обработано с подлинным DateTime
и TimeSpan
структуры, предусмотренные рамками.
_Q12_
я думаю, что это лучшее объяснение (для сравнения)
CountUp() работает превосходно ! И под этим я подразумеваю, что если я установлю time.s или time.m на 44, то время будет начинаться с этого значения, считая вверх, правильно и как часы (а не до 10000000).
Эта функциональность мне нужна именно для обратного отсчета. Если я установлю time.s или time.m на 12, он будет отсчитывать его как часы (не до 1000000), и от этого значения я его установлю.
Прямо сейчас я просто делаю это очень неправильно с тем кодом, который у меня есть.
_Q12_
интересное предложение и я попробую его сейчас