0

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

来电代码:

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?????
        }
     }
 }

谢谢你的帮助,

4

3 回答 3

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;
    }
于 2013-11-08T23:39:05.953 回答
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;
  }
于 2013-11-08T23:51:18.283 回答
1

您可以将方法Form.DialogResult内部设置为,这样您的表单将不会返回到调用方表单(“关闭”)。DatasetProperties.btnOK_ClickDialogResult.NoneDatasetProperties

// 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 Nothing 时,从对话框返回。这意味着模态对话框继续运行。

于 2013-11-09T00:02:11.720 回答