如何处理表单结束事件

时间:2013-11-21 11:22:53

标签: c# winforms windows-forms-designer

我在c#中使用Windows窗体,并且在不同形式(我有2个)应该关闭和不关闭的方式和时间方面存在问题。这是非常烦人的,因为我觉得我应该能够解决它。但是我们走了。

我有两个表单,一个调用另一个名为ContactForm的表单的MainForm。

主要形式:

private void btnAdd_Click(object sender, EventArgs e)
    {
        ContactForm frmContact = new ContactForm();
        int index = lstCustomers.SelectedIndex;
        //If a customer is selected, export data for the selected customer to ContactForm
        if (index != -1)
        {
            frmContact.ContactData = customerMngr.GetCustomer(index).ContactData;
        }

        if (frmContact.ShowDialog() == DialogResult.OK) //Show the ContactForm object
        {
            //The user has chosen the OK button - add the new customer object
            customerMngr.AddCustomer(frmContact.ContactData);   //??      
            UpdateCustomerList();
        }

        if (frmContact.ShowDialog() == DialogResult.Cancel)
        {
            return;
        }
    }

以及所谓的形式: 确定按钮。

private void btnOK_Click(object sender, EventArgs e)
    {
        if (ValidateInput())
        {
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
    }

取消按钮:

private void btnCancel_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("Do you want to cancel and discard all data?", "Cancel input", MessageBoxButtons.YesNo,
                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }
    }

当使用ContactForm中的OK按钮时,我希望它关闭,这有效。当我按下取消按钮,然后没有(在出现的框中),我希望表单保持打开状态,输入仍然完好无损。现在它不起作用。

有什么想法吗?

/马丁

1 个答案:

答案 0 :(得分:1)

你的代码没问题。我认为问题在于你的Cancel Button本身。我的意思是你可能(通过设计师或代码中的某个地方)DialogResul.Cancel附加到按钮btnCancel.DialogResul属性。要解决此问题,只需将其设置为DialogResult.None

如果我是对的,这就是关闭你的第二张表格。

有关详细信息,请参阅MSDN