Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Отсчитывать время по таймеру


Автор: blast99 1.10.2006, 16:07
Ребят, есть: label и две кнопки одна таймер запускает, другая останавливает.

Как работать с таймером разобрался...
Код

static System.Timers.Timer myTimer = new System.Timers.Timer();
    
public MainForm()
{
    Text = "This is my form";
    myTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
    myTimer.Interval=5000;
    myTimer.Enabled=true;
    myTimer.Start();
}
    
public static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    myTimer.Stop();
    MessageBox.Show("Timer");
}


А вот как формировать прошедшее время в label не пойму...
Надо, чтобы тикало в формате ММ:СС(Минуты:Секунды).

Автор: blast99 1.10.2006, 16:35
хм... Оказывается у Compact Framework нет: System.Timers.Timer

А как же тогда в CF таймер завести?

Автор: blast99 1.10.2006, 17:11
Отображение написал:
Код

    public class myTime
    {
        uint uiMin = 0;
        uint uiSec = 0;

        public uint GetMin()  { return uiMin;  }

        public uint GetSec()  { return uiSec;  }

        public void IncSec()
        {
            if (uiSec == 59)
            {
                uiMin++;
                uiSec = 0;
            }
            else uiSec++;
        }

Автор: blast99 1.10.2006, 17:32
А вот как таймер завести, что-то не понял

Автор: reloni 1.10.2006, 17:49
Цитата(blast99 @  1.10.2006,  17:35 Найти цитируемый пост)
хм... Оказывается у Compact Framework нет: System.Timers.Timer

В компакте есть:
System.Threading.Timer и System.Windows.Forms.Timer 

Автор: blast99 1.10.2006, 19:09
reloni, спасибо за совет!
Доберусь до работы поищу...

Автор: blast99 2.10.2006, 08:30
С таймером разобрался! Пользую System.Windows.Forms.Timer.
Правда опять маленька я проблема.
Код

 // мой класс myTime
//см. пост выше.
 // Класс формы
    public class Form1 : System.Windows.Forms.Form
    {
        static Timer myTimer = new Timer(); // timer
        public myTime ob = new myTime(); // объект класс myTime
...
     }
// далее понятно
        public Form1()
        {
            InitializeComponent();
        }
// фун-я инициализации
        private void InitializeComponent()
        {
            myTimer.Tick += new EventHandler( TimerEventProcessor );
            myTimer.Interval = 1000;
            myTimer.Enabled = true;
         }

// а вот здесь невозможно обращаться ни к объекту ob
// ни к элементам формы.
        private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
        {
            ob.IncSec();
            string str;
            str = string.Format("{0:0#}:{1:0#}", ob.GetMin(), ob.GetSec());
            lblTime.Text = str;
        }


 Блин, так как же сделать обработчик таймера с возможностью работы с объектами формы?

Автор: Naum 2.10.2006, 09:55
У меня пока все еще нет студии под рукой smile ,и код С# я пока не могу писать в блокноте smile . Поэтому скажу лишь общую идею. 
При инициализации таймера записываешь в какую-нить глобальную переменную текущее время. А в обработке события Timer.Tick вычитаешь из текущего времени эту глобальную переменную и отображаешь получившееся значение.

Автор: reloni 2.10.2006, 09:59
blast99, а зачем функция обработчик статиком объявлена? Естественно в ней к элементам экземпляра формы обращаться нельзя.

Автор: blast99 2.10.2006, 11:03
reloni, ты был прав!  smile 
Убрал static и все стало норм!

Ребят, спасибо большое за помощь!

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