【发布时间】:2009-12-09 00:51:50
【问题描述】:
我有两个组合框,一个列出一周中的 7 天,另一个列出一组时间(7 个不同的时间,每个时间作为字符串)。
我遇到的问题是我希望能够阻止用户根据所选日期/时间选择某些项目。
例如,周一早上 7 点到 9 点的组合框选项不应该可用,因为它是“预先预订的”,如果这有意义的话。
日期和时间用于 7x7 数组,组合框中的每个索引与数组中的一个元素相关,因此根据组合框中选定的索引,我可以使用正确的数组元素。
最好的方法是什么?我已经尝试了一系列 if 语句,但它会滑过它们并继续处理不应该的数据。
编辑:
添加了 jmatthews3865 的示例尝试
private void buttonOK_Click(object sender, EventArgs e)
{
if (comboBoxTime.SelectedIndex != 0 && comboBoxDay.SelectedIndex != 5 | comboBoxDay.SelectedIndex != 6)
{
if (comboBoxTime.SelectedIndex != 1 | comboBoxTime.SelectedIndex != 2 | comboBoxTime.SelectedIndex != 3
&& comboBoxDay.SelectedIndex != 0 | comboBoxDay.SelectedIndex != 1 | comboBoxDay.SelectedIndex != 2
| comboBoxDay.SelectedIndex != 3 | comboBoxDay.SelectedIndex != 4)
{
if (comboBoxTime.SelectedIndex != 5 | comboBoxTime.SelectedIndex != 6 && comboBoxDay.SelectedIndex != 5
| comboBoxDay.SelectedIndex != 6)
{
lock (this)
{
int date = this.comboBoxDay.SelectedIndex;
int time = this.comboBoxTime.SelectedIndex;
if (IsUser)
{
string fName = textBoxFName.Text;
string lName = textBoxLName.Text;
string pCode = textBoxPCode.Text;
AddUserBooking(date, time, fName, lName, pCode);
}
else
{
int mNo = int.Parse(textBoxMNo.Text);
AddMemberBooking(date, time, mNo);
}
}
CloseBookingForm();
}
}
}
else
{
MessageBox.Show("Select a valid Date/Time and try again");
}
}
它似乎在第一个 if 语句块上运行良好,但失败了。
如果所选日期是星期六/星期日 ([5],[6]),则时间 [0] 和 [5],[6] 不可用。 周一至周五,包括[1]至[3]的时间不可用。
如果不是因为我的截止日期非常短,而且讲师无法做出合理的作业,那么我很乐意重构所有这些。
EDIT2:
我已经设法实现了一个似乎运行良好的系统。 它基于 Steven Adams 解决方案,该解决方案本质上在布尔方法中使用了 if 语句。 我在处理预订之前调用该方法,如果它返回 true,则可以进行预订,否则会显示一个消息框,并显示相应的错误。
【问题讨论】:
-
您使用的是 Windows 窗体还是 Web 窗体?
-
如果您将检查预订是否有效移出,它将澄清您的代码,例如isValidAppointmentTime(date,start,finish)->Boolean 而不是所有那些 ifs。我可能读错了,但请检查第三个 if 语句中的大括号
-
你说得对,它会让它变得更干净、更简单。我一定会这样做的