如何从内部重新加载/重新显示表单?

时间:2013-11-08 23:34:48

标签: c# winforms

我有一个表格,我用它作为数据输入的模态对话框。当用户单击表单上的“确定”按钮时,我希望按钮处理程序执行数据验证,如果有任何错误,表单应重新加载/重新显示,而不是返回给调用者。这可能吗?

来电者代码:

DatasetProperties propsWindow = new DatasetProperties();
if (propsWindows.ShowDialog() == DialogResult.Cancel)
    return;
// Do other stuffs here

表格代码:

public partial class DatasetProperties : Form
{
    // Constructor here

    // OK button handler
    private void btnOK_Click(object sender, EventArgs e)
    {
        // Do data validations here
        if (errorsFound)
        {
            // How to reload/redisplay the form without return to caller?????
        }
     }
 }

感谢您的帮助,

3 个答案:

答案 0 :(得分:2)

不要让用户在未经验证的情况下关闭表单。

使用FormClosing事件。这是一个例子。代替messageBox,包含您的验证代码。如果它没有验证,则e.cancel = true。

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (MessageBox.Show("Are you sure you want to cancel without saving any changes?", "Confirm Cancel", MessageBoxButtons.YesNo) != DialogResult.Yes)
            e.Cancel = true;
    }

答案 1 :(得分:1)

如user1646737所述,你可以像这样使用FormClosing事件:

private void btnOK_Click(object sender, EventArgs e)
{
    // Do data validations here
    Close();
}

事件:

private void DatasetProperties_FormClosing(object sender, FormClosingEventArgs e)
  {
      e.Cancel = errorsFound;
  }

答案 2 :(得分:1)

您可以将Form.DialogResult方法中的DatasetProperties.btnOK_Click设置为 DialogResult.None ,这样您的DatasetProperties表单就不会返回到来电表格( '关闭')。

// OK button handler
private void btnOK_Click(object sender, EventArgs e)
{
    // Do data validations here
    if (errorsFound)
    {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
        // How to reload/redisplay the form without return to caller?????
    }
 }

这样,只要您有错误,就可以“留在”DatasetProperties表单中。 从msdn,当DialogResult Enumeration设置为None 时,对话框中不会返回任何内容。这意味着模态对话框继续运行。