无法在此循环中找到问题

时间:2012-08-01 12:18:15

标签: c#

我有一个表单,用户输入我保存在数组中的值,但是当用户想要取消时,我希望用户最后一次询问用户是否要继续取消预订。如果用户拒绝这个最后的时间,我希望程序返回到GUI并关注具有所有预订行的文本框而不进行取消,但我向您显示我编写的代码,并询问用户是否是确定如果没有,它仍会删除预订,然后专注于文本框。我的代码出了什么问题?

public void Cancelreservation()
{
    int index = lstReservations.SelectedIndex;
    bool checkedindex = m_seatMngr.CheckIndex(index);
    if (checkedindex)
    {

        if (!m_seatMngr.CancelSeat(index))
        {
            if (lstReservations.SelectedIndex == -1)
            {
                MessageBox.Show("You need to select a row.", "Error!",
                MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation,
                MessageBoxDefaultButton.Button1);
                lstReservations.Focus();
            }
            else
            {
                MessageBox.Show("The seat is not reserved! No need to cancel 
                                  reservation.", "Important Query", 
                                  MessageBoxButtons.OK);
                lstReservations.Focus();
            }
        }
        else
        {
            if (MessageBox.Show("Continue to cancel the reservation?", 
                                "Important Query", MessageBoxButtons.YesNo) 
                                == DialogResult.No)
            {
                lstReservations.Focus();                                
            }
            else
            {
                m_seatMngr.CancelSeat(index);
            }
        }
    }

m_seatMngr

         public bool CancelSeat(int index)
    {

        if (m_vacantList[index] == "Reserved") 
        {
            m_nameList[index] = " - ";
            m_priceList[index] = 0;
            m_vacantList[index] = "Vacant";
            return true;
        }
        else
        {
            return false;              
        }

    }         

2 个答案:

答案 0 :(得分:3)

假设m_seatMngr.CancelSeat(index)是实际取消座位的方法,您将调用该方法两次。第二个if语句,代码中有六行,是:

if (!m_seatMngr.CancelSeat(index))

...并且似乎(根据上述假设)此行将在您显示MessageBox之前取消座位。

答案 1 :(得分:2)

if (!m_seatMngr.CancelSeat(index))
{
    // the rest of your code, which displays the messageboxes
}

在您显示任何消息框之前,总是调用m_seatMngr.CancelSeat。