одно нажатие кнопки создает два события

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

Что мне нужно сделать Первое нажатие на кнопку сохраняет время прибытия сотрудника в базу данных, второе нажатие на ту же кнопку сохраняет время ухода сотрудника (вместо двух кнопок, конечно)

Я думаю, мне нужен какой-то счетчик, который подсчитывает нажатия кнопок или что-то в этом роде, но я действительно понятия не имею, как программировать что-то подобное, поэтому, если бы вы могли мне помочь.

Это то, что у меня есть на данный момент Обратите внимание, что код не работает, так что проблем нет, за исключением того, что я не знаю, как его программировать. Спасибо

int counter = 0;
    public void button1_Click(object sender, EventArgs e)
    {
        counter++;
        try
        {
            if (counter == 1)
            {

                OleDbConnection myConnection= new OleDbConnection("\\CONNECTION PATH");
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = myConnection;
                cmd.CommandText = "Insert into Weekdays (Arrival)" + "values(@Arrival)";

                cmd.Parameters.AddWithValue("@Arrival", DateTime.Now);

                myConnection.Open();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Arrival added.");
                myConnection.Close();

            }
            else if (counter == 2)
            {
                OleDbConnection myConnection= new OleDbConnection("\\CONNECTION PATH");
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = myConnection;
                cmd.CommandText = "Insert into Weekdays (Departure)" + "values(@Departure)";

                cmd.Parameters.AddWithValue("@Departure", DateTime.Now);

                myConnection.Open();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Departure added.");
                myConnection.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

person fkr    schedule 14.01.2014    source источник
comment
О, это работает. Дважды, если быть точным; пока счетчик не станет равным 3. Я бы согласился с ответом Гранта, но дополнительно также изменил текст кнопки (например, чередование «Прибытие» и «Отъезд» или что-то в этом роде), чтобы подчеркнуть ее текущую функцию и избежать путаницы.   -  person    schedule 14.01.2014
comment
@elgonzo Это дает мне ошибку Несоответствие типа данных в выражении критериев. для ---› cmd.ExecuteNonQuery(); ... что-то не так с datetime.now?   -  person fkr    schedule 14.01.2014
comment
@GrantWinney оба дата/время   -  person fkr    schedule 14.01.2014
comment
@fkr, извините, я не просмотрел весь ваш код. Мой комментарий относился конкретно к вашей логике переключения функции кнопки, а не к вашему коду, обрабатывающему базу данных. Извините за путаницу :)   -  person    schedule 14.01.2014
comment
@GrantWinney теперь работает, но устанавливает дату под двумя разными идентификаторами ... и дата устанавливается как 1990, лол -.-   -  person fkr    schedule 14.01.2014
comment
@GrantWinney хорошо, спасибо :)   -  person fkr    schedule 14.01.2014


Ответы (2)


Вы можете создать логическое значение, чтобы указать, работает ли сотрудник или нет.

bool clockedIn = false;

public void button1_Click(object sender, EventArgs e)
{
    if (!clockedIn)
    {
        // employee just arrived - log arrival time
    }
    else
    {
        // employee leaving - log departure time
    }

    clockedIn = !clockedIn;
}
person Grant Winney    schedule 14.01.2014
comment
Вероятно, это работает нормально, но выдает несоответствие типа данных в выражении критерия. ошибка для ---› cmd.ExecuteNonQuery(); ... что-то не так с datetime.now? - person fkr; 14.01.2014

Быстрый и грязный способ:

    private void button1_Click(object sender, EventArgs e)
    {
        if (button1.Tag == null)
        {
            button1.Tag = "toogled";

            // run event 1
        }
        else
        {
            button1.Tag = null;

            // run event 2
        }
    }
person HABJAN    schedule 14.01.2014
comment
Это выдает ошибку Несоответствие типа данных в выражении критериев. для ---› cmd.ExecuteNonQuery(); ... что-то не так с datetime.now? - person fkr; 14.01.2014