【问题标题】:C# Automatic Shows Button Disabled if seat already reserved如果座位已预留,C# Automatic Shows Button Disabled
【发布时间】:2020-12-10 12:52:23
【问题描述】:

所以我每次都有每个面板,当你从 timeComboBox 中单击时间时,面板会显示。

如果按钮已经在数据中,我希望将其禁用,以免重复。

如果数据已经在数据库中,或者如果座位已被保留,我希望禁用该按钮。

有没有可能,我应该在预订书的什么地方或面板的位置或按钮中编写代码:)

这就是现在的样子:

下面是timeComboBox的代码:

private void timeComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (timeComboBox.SelectedItem.ToString() == "8 am")
{
showSubMenu(panel1);
panel2.Visible = false;
panel3.Visible = false;// To Hide other panel when opening a panel.
panel4.Visible = false;
panel5.Visible = false;
panel6.Visible = false;
panel7.Visible = false;
panel8.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "9 am")
{
showSubMenu(panel2);
panel1.Visible = false;
panel3.Visible = false;
panel4.Visible = false;
panel5.Visible = false;
panel6.Visible = false;
panel7.Visible = false;
panel8.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "10 am")
{
showSubMenu(panel3);
panel1.Visible = false;
panel2.Visible = false;
panel4.Visible = false;
panel5.Visible = false;
panel6.Visible = false;
panel7.Visible = false;
panel8.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "11 am")
{
showSubMenu(panel4);
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
panel5.Visible = false;
panel6.Visible = false;
panel7.Visible = false;
panel8.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "12 pm")
{
showSubMenu(panel5);
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
panel4.Visible = false;
panel6.Visible = false;
panel7.Visible = false;
panel8.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "1 pm")
{
showSubMenu(panel6);
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
panel4.Visible = false;
panel5.Visible = false;
panel7.Visible = false;
panel8.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "2 pm")
{
showSubMenu(panel7);
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
panel4.Visible = false;
panel5.Visible = false;
panel6.Visible = false;
panel8.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "3 pm")
{
showSubMenu(panel8);
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
panel4.Visible = false;
panel5.Visible = false;
panel6.Visible = false;
panel7.Visible = false;
panel9.Visible = false;
}
if (timeComboBox.SelectedItem.ToString() == "4 pm")
{
showSubMenu(panel9);
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
panel4.Visible = false;
panel5.Visible = false;
panel6.Visible = false;
panel7.Visible = false;
panel8.Visible = false;
}
}

这是预订按钮的代码:

private void reservationButton_Click(object sender, EventArgs e)
    {
        //Reservation Button.
        string nameString = nameTextbox.Text;
        string mobileString = mobileTextbox.Text;
        string timeString = timeComboBox.Text;
        string seatNumberString = textBox1.Text;
        bool allPopulatedBool = nameString != string.Empty && mobileString != string.Empty && timeString != string.Empty && seatNumberString != string.Empty;
        if (allPopulatedBool)
        {
            //if the Form are completed.
            SqlConnection con = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=LocalDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");
            con.Open();
            string queryString = "INSERT INTO CustomersInfo VALUES(@CustomersName, @CustomersMobile, @CustomersTime, @seatNumber)";

            SqlParameter param1 = new SqlParameter();
            param1.ParameterName = "@CustomersName";
            param1.Value = nameString;

            SqlParameter param2 = new SqlParameter();
            param2.ParameterName = "@CustomersMobile";
            param2.Value = mobileString;

            SqlParameter param3 = new SqlParameter();
            param3.ParameterName = "@CustomersTime";
            param3.Value = timeString;

            SqlParameter param4 = new SqlParameter();
            param4.ParameterName = "@seatNumber";
            param4.Value = seatNumberString;

            SqlCommand command = new SqlCommand(queryString, con);
            command.Parameters.Add(param1);
            command.Parameters.Add(param2);
            command.Parameters.Add(param3);
            command.Parameters.Add(param4);

            command.ExecuteNonQuery();
            con.Close();
            MessageBox.Show("Reservation has been Successfully Booked!", "Schedule Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
            nameTextbox.Text = string.Empty;
            mobileTextbox.Text = string.Empty;
            timeComboBox.Text = string.Empty;
            textBox1.Text = string.Empty;
            panel1.Visible = false;
            panel2.Visible = false;
            panel3.Visible = false;
            panel4.Visible = false;
            panel5.Visible = false;
            panel6.Visible = false;
            panel7.Visible = false;
            panel8.Visible = false;
            panel9.Visible = false;
        }
        if (!allPopulatedBool)
        {
            //if the Form are not completed.
            MessageBox.Show("Please fill out all fields.", "Incomplete Entry", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

【问题讨论】:

  • 哇,你真的应该学习如何使用列表来获得优势。重复的代码太多了......想象一下你有 30 个面板而不是 9 个
  • 我会搜索它谢谢你:)
  • 首先,我会将所有if 检查重做为switch 块,这要么更具可读性,而且以后可以更轻松地更改。 e.您的营业时间会发生变化。第二个也是更相关的问题:你在哪里写信,如果某个时间有座位被占用,你使用哪个数据库?
  • 我有 4 列 CustomersName、CustomersMobile、CustomersTime、seatNumber。我在组合框中选择时间,如果按下座位号按钮,则数字出现在 textBox1 中,然后我将其保存到 LocalDB。我将对其进行编辑并放入 ReservationButton 的代码。
  • 基本上我会按照这个想法将日期和/或时间传递给数据库,并返回每个座位的状态。据此,我可以将面板中的按钮设置为enableddisabled。这也将使您摆脱大量重复的代码,并让您只用 one 面板处理所有额外的工作。实际上是将椅子(所以buttons)调整到给定时间

标签: c# button panel


【解决方案1】:

请使用列表和字典来简化您的代码。

private void timeComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    // This would probably be a field instead of a local variable
    var allpanels = new List<Panel> {panel1, panel2, panel3, panel4, panel5, panel6, panel7, panel8, panel9};
    // Make all panels invisible
    // This would probably be a method instead of local code
    foreach (var panel in allpanels)
    {
        panel.Visible = false;
    }

    // This would probably be a field instead of a local variable
    var timepanels = new Dictionary<string, Panel> {{"8 am", panel1}, {"9 am", panel2}, {"10 am", panel3} /* ... */};
    // Make 1 panel visible
    var selectedTime = timeComboBox.SelectedItem.ToString();
    timepanels[selectedTime].Visible = true;
    showSubmenu(timepanels[selectedTime]);
}

但是,一个问题是:为什么每次都使用一个面板?只要更新得当,一个面板还不够吗?

【讨论】:

  • 哦,我不知道这可能是我之前在互联网上搜索过的,但我没有看到 ans,但谢谢你,我会尝试一下 :)
  • 我的方法也是一样的,不过建模和编写正确的查询需要一些时间
猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多