一键单击创建两个事件

Posted

技术标签:

【中文标题】一键单击创建两个事件【英文标题】:one button click creates two events 【发布时间】:2014-01-14 17:28:22 【问题描述】:

我需要创建一个按钮来制作两个事件并将其保存到数据库中(员工的到达和离开时间)。

我需要做什么第一次点击按钮将员工的到达时间保存到数据库,第二次点击相同的按钮保存员工的离开时间(而不是有2个按钮当然)

我想我需要某种计数器来计算按钮点击或类似的东西,但我真的不知道如何编程这样的东西,所以如果你能帮助我。

这是我目前所拥有的 请注意代码不起作用,所以除了我不知道如何编程之外没有任何问题。谢谢

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);
        
    

【问题讨论】:

哦,它有效。两次,准确地说;直到计数器变为 3。我会选择格兰特的答案,但另外还要更改按钮的文本(例如在“到达”和“离开”之间交替,或其他内容)以强调其当前功能并避免混淆。 @elgonzo 它给了我标准表达式中的数据类型不匹配。 ---> cmd.ExecuteNonQuery() 的错误; ... datetime.now 有什么问题吗? @GrantWinney 都是日期/时间 @fkr,抱歉,我没有查看您的整个代码。我的评论专门针对您切换按钮功能的逻辑,而不是关于您处理数据库的代码。很抱歉造成混乱:) @GrantWinney 现在可以工作了,但是它将日期设置在两个不同的 ID 下......并且日期设置为 1990 年哈哈 -.- 【参考方案1】:

您可以创建一个布尔值来指示员工是否已打卡。

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;

【讨论】:

它可能工作正常,但它给了我标准表达式中的数据类型不匹配。 ---> cmd.ExecuteNonQuery() 的错误; ... datetime.now 有问题吗?【参考方案2】:

快速而肮脏的方式:

    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
        
    

【讨论】:

它给了我 标准表达式中的数据类型不匹配。 ---> cmd.ExecuteNonQuery(); 错误... datetime.now 有问题吗?

以上是关于一键单击创建两个事件的主要内容,如果未能解决你的问题,请参考以下文章

按钮单击事件未在用户控件中触发,在另一个用户控件中动态创建

在单击事件中同时调用两个功能

如何在自定义用户控件上创建单击事件?

如何防止在单击事件上触发两个相同的 useState 挂钩

在 Mousedown 事件上停止单击事件函数的问题

如何在单个按钮单击或事件上执行两个任务