Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Вопрос о работе с таймером.


Автор: shark1 27.4.2008, 16:57
Подскажите как такое можно сделать.Есть отрезок времени,разница помещается в txt(
Код

TimeSpan ts = dEnd - dStart;
            txt_twt.Text = ts.ToString();
).Как сделать чтоб следующий отрезок не стирал предыдущий а прибовлялся к ниму.Зарание спасибо.

Автор: vponomarov 27.4.2008, 20:06
Код

TimeSpan ts =TimeSpan.TryParse(txt_twt.Text)+ dEnd - dStart;
txt_twt.Text = ts.ToString();

Автор: shark1 28.4.2008, 07:55
vponomarov спасибо,только ругается:
No overload for method 'TryParse' takes '1' arguments,
подскажи что туда подставить.Спасибо.

Автор: mr.DUDA 28.4.2008, 10:42
Наверно, так:
Код
TimeSpan ts;
if (TimeSpan.TryParse(txt_twt.Text, out ts))
{
   ts += dEnd - dStart;
   txt_twt.Text = ts.ToString();
}

 smile 

Автор: shark1 28.4.2008, 16:47
mr.DUDA спасибо за ответ,но почемуто не срабатывает,т.е нет никакой ошибки,но и время не появляется в txt_twt,а вот с моими корявыми двумя строчками появляется.И еще,почемуто ,не понимаю почему, как только я запускаю время,оно появляется в верху вместо имени окна smile  ? зарание спасибо.

Автор: Optimus 28.4.2008, 17:46
shark1
а какой текст находится в txt_twt.Text, в этой строчке
Цитата(mr.DUDA @  28.4.2008,  10:42 Найти цитируемый пост)

Код

if (TimeSpan.TryParse(txt_twt.Text, out ts))



Автор: shark1 28.4.2008, 18:03
Должен по идее находиться вот это:

DateTime dStart = Convert.ToDateTime(txt_Clockbegin.Text);
DateTime dEnd = Convert.ToDateTime(txt_ClockEnd.Text);

TimeSpan ts;
if (TimeSpan.TryParse(txt_twt.Text, out ts))
{
   ts += dEnd - dStart;
   txt_twt.Text = ts.ToString();
}

Автор: Optimus 28.4.2008, 18:29
shark1
Цитата(Optimus @  28.4.2008,  17:46 Найти цитируемый пост)
какой текст находится в txt_twt.Text


Если там, на пример, пустая строка
то метод TryParse() возвращает false, и весь блок if'a пропускается.

Автор: shark1 28.4.2008, 18:40
Optimus там не пустая txt, при нажатии на чек бох:
Код

private void chb_Tbegin_Click(object sender, EventArgs e)
        {           
            this.txt_Clockbegin.Text = DateTime.Now.ToLongTimeString();
            tmrClock1.Enabled = !tmrClock1.Enabled;
            txt_ClockEnd.Text = DateTime.Now.ToLongTimeString();
            this.Text = DateTime.Now.ToLongTimeString();
            if (tmrClock1.Enabled = tmrClock1.Enabled)
                chb_TEnd.Visible = true;
           
            chb_TEnd.Checked = false;
            
        }

затем:
время останавливается:
Код

private void chb_TEnd_Click(object sender, EventArgs e)
        {
            
            tmrClock1.Enabled = false;
            DateTime dStart = Convert.ToDateTime(txt_Clockbegin.Text);
            DateTime dEnd = Convert.ToDateTime(txt_ClockEnd.Text);
            chb_TEnd.Hide();

            TimeSpan ts;
            if (TimeSpan.TryParse(txt_twt.Text, out ts))
            {
                ts += dEnd - dStart;
                txt_twt.Text = ts.ToString();
            }
                       chb_Tbegin.Checked = false;

            //this.txt_ProblemOn.Text = DateTime.Now.ToLongTimeString();
            //tmrClock.Enabled = !tmrClock.Enabled;
            //txt_ProblemOff.Text = DateTime.Now.ToLongTimeString();
            //this.Text = DateTime.Now.ToLongTimeString();     

        }


Автор: Optimus 28.4.2008, 18:52
Цитата(shark1 @  28.4.2008,  18:40 Найти цитируемый пост)
там не пустая txt

из кода не видно.

поставьте MessageBox перед if'ом
Код

  // ...
  MessageBox.Show(txt_twt.Text);
  if (TimeSpan.TryParse(txt_twt.Text, out ts))
  // ...

напишите что выводится.

Автор: shark1 28.4.2008, 19:00
Твоя правда,нечего не выводится,но если я вставляю свои две строчки(TimeSpan ts = dEnd - dStart;
            txt_twt.Text = ts.ToString();) то тоже нечего не выводиться,однако время появляется в txt_twt.Спасибо.

Автор: Optimus 28.4.2008, 19:11
Можно сделать так:
Код

  // ...
  private TimeSpan ts = new TimeSpan(); // или инициализируете в конструкторе
  // ...
  private void chb_TEnd_Click(object sender, EventArgs e)
  {
    // ...
    ts += dEnd - dStart;
    txt_twt.Text = ts.ToString();
    // ...
  }
  // ...

Автор: shark1 28.4.2008, 19:23
Окончательный код:
Код

private TimeSpan ts = new TimeSpan(); 
        
        private void chb_TEnd_Click(object sender, EventArgs e)
        {
            tmrClock1.Enabled = false;
            DateTime dStart = Convert.ToDateTime(txt_Clockbegin.Text);
            DateTime dEnd = Convert.ToDateTime(txt_ClockEnd.Text);
            chb_TEnd.Hide();
            ts += dEnd - dStart;
            txt_twt.Text = ts.ToString();
            
            chb_Tbegin.Checked = false;
        }

СПАСИБО большое,только если можно в двух словах обьясни,почему у меня не работало

Автор: Optimus 28.4.2008, 19:58
Цитата(shark1 @  28.4.2008,  19:23 Найти цитируемый пост)
почему у меня не работало 

потому что переменная ts создавалась и удалялась в chb_TEnd_Click(),
соответственно теряли её значение.

Автор: shark1 29.4.2008, 00:24
Еще раз огромное спасибо.Век живи век учись.Большое тебе спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)