Динамические таймеры в WinForm

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by stas1kus, 10 Jun 2014.

  1. stas1kus

    stas1kus New Member

    Joined:
    25 Jun 2012
    Messages:
    33
    Likes Received:
    4
    Reputations:
    0
    всем ку.
    Подскажите пожалуйста как правильно организовать установку таймеров, чтоб они понимали в какой строке Грида был установлен таймер.
    У меня получается есть грид, при нажатии на строку открывается окно с установкой времени, через сколько должен сработать таймер, сейчас я запутался уже с логикой и у меня работает только 1 таймер, но вообще их в гриде должно быть н-количесво + время которое я получил тоже должно понимать для какого времени было установленно.. пока что у меня есть Лист таймеров, но вся проблема в том, что таймеры могут быть в гриде в разброс, и обращаться по timerList[rowNumber] не корректно...

    Code:
    public void timerStart(string hour, string min, string sec)
            {
                hoursF1 = Convert.ToInt32(hour);
                minutesF1 = Convert.ToInt32(min);
                secondsF1 = Convert.ToInt32(sec);
    
                DateTime date = DateTime.Now;
                date = date + new TimeSpan(hoursF1, minutesF1, secondsF1);
                string finishTime = date.ToLongTimeString();
    
                this.dataGridView1.Rows.Add();
                this.dataGridView1.Rows[rowNum].Cells[8].Value = finishTime;
                this.dataGridView1.Refresh();
    
                System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
                timersList.Add(timer);
                timersList[0].Tick += new EventHandler(timer_Tick);
                timersList[0].Interval = 1000;
                timersList[0].Enabled = true;
                timersList[0].Start();
            }
    
            private void timer_Tick(object sender, EventArgs e)
            {
                if ((minutesF1 == 0) && (hoursF1 == 0) && (secondsF1 == 0))
                {
                    timersList[0].Enabled = false;
                    taskUp(rowNum); //call to method 
                    MessageBox.Show("secc");
                }
                else
                { // Else continue counting.
                    if (secondsF1 < 1)
                    {
                        secondsF1 = 59;
                        if (minutesF1 == 0)
                        {
                            minutesF1 = 59;
                            if (hoursF1 != 0)
                                hoursF1 -= 1;
    
                        }
                        else
                        {
                            minutesF1 -= 1;
                        }
                    }
                    else
                        secondsF1 -= 1;
                }
            }