如何在 C 语言中循环单选按钮#

How to loop radiobutton selection in C#

提问人:parz 提问时间:12/11/2022 最后编辑:Olivier Jacot-Descombesparz 更新时间:12/11/2022 访问量:83

问:

enter image description here

我有一个程序,允许客户为饮料投票。 点一杯饮料等于一票。 点两杯饮料等于两票,依此类推。 输入 Order_ID 以检查投票计数。 客户通过选择单选按钮进行投票,然后单击提交按钮。 提交后,票数应为 -1。 消息框将显示剩余投票数。(例如,订购了 5 杯饮料,在一次投票提交后应显示“剩余投票数为 4”,并在投票数为 0 时停止程序)。

我的问题是如何实现上述目标?我尝试使用循环,但中间没有暂停让客户再次重新提交。Loop 将以计数计数计数显示 MessageBox,直到投票计数达到 0。

第二个问题,我可以使用groupbox吗?但是如果应用 GroupBox,如何编写代码。

第三个问题,或者我根本不应该使用循环?

private void btnSubmitVote_Click(object sender, EventArgs e)
{
    for (int i = OrdersQty; OrdersQty > 0 ; OrdersQty-- )
    {
        if (radAmericano.Checked)
        {
            conn.Open();
            MySqlCommand comm2a = new MySqlCommand(sql2a, conn);
            MySqlDataReader reader2a = comm2a.ExecuteReader();
            comm2c.ExecuteDataReader()
            comm2a.Dispose();
            conn.Close();

            conn.Open();

            MySqlCommand comm2b = new MySqlCommand(sql2b, conn);
            comm2b.ExecuteNonQuery();
            comm2b.Dispose();
            conn.Close();

            MessageBox.Show("You have " + OrdersQty + " vote left")
        }

        if (radCappuccino.Checked)
        {  
            conn.Open();
            MySqlCommand comm2c = new MySqlCommand(sql2c, conn);
            MySqlDataReader reader2a = comm2a.ExecuteReader();
            comm2c.ExecuteDataReader()
            comm2c.Dispose();
            conn.Close();

            conn.Open();

            MySqlCommand comm2d = new MySqlCommand(sql2d, conn);
            comm2d.ExecuteNonQuery();
            comm2d.Dispose();
            conn.Close();

            MessageBox.Show("You have " + OrdersQty + " vote left")
        }
    }
    MessageBox.Show("You have " + OrdersQty + " vote left" + "Thank you")
    this.Close();
}
C# MySQL 循环 单选按钮 groupbox

评论

0赞 Olivier Jacot-Descombes 12/11/2022
如果您从不使用阅读器,那么打电话有什么意义?你应该对读者做这样的事情:.否则,只有调用才有意义。ExecuteReaderwhile (reader.Read()) { doSomething; }ExecuteNonQuery

答:

0赞 Olivier Jacot-Descombes 12/11/2022 #1

必须删除循环,因为用户只能在执行 Button Click 事件处理程序时激活单选按钮并执行其他输入。只要事件处理程序正在运行,UI 就会被冻结。当他未完成时显示一条消息。然后,他将进行另一个选择并再次单击提交按钮。

此外,您应该将 MySQL 的参数化查询与 C# 一起使用。像这样,您将能够对不同种类的咖啡重复使用相同的命令。如果您将几乎相同的代码提取到另一个方法,它也会简化代码。

private bool InsertOrderItem(int orderId, int coffeeId)
{
    const string insertSql = "INSERT INTO OrderItem (OrderId, CoffeId) VALUES (@oid, @cid)";
     
    using var connection = new MySqlConnection(connectionString);
    using var command = new MySqlCommand(insertSql, connection);
    command.Parameters.AddWithValue("@oid", orderId);
    command.Parameters.AddWithValue("@cid", coffeeId);
    connection.Open();
    return command.ExecuteNonQuery() > 0;
}

然后你可以写这样的东西

private void btnSubmitVote_Click(object sender, EventArgs e)
{
    if (radAmericano.Checked) {
        if (InsertOrderItem(orderId, americanoCoffeeId)) {
            OrdersQty--;
        }
    } else if (radCappuccino.Checked) {
        if (InsertOrderItem(orderId, cappucinoCoffeeId)) {
            OrdersQty--;
        }
    }
    if (OrdersQty == 0) {
        Close();
    } else{
        MessageBox.Show($"You have {OrdersQty} votes left\r\n\r\nThank you")
    }
}