我有一个表格,我用它作为数据输入的模态对话框。当用户单击表单上的“确定”按钮时,我希望按钮处理程序执行数据验证,如果有任何错误,表单应重新加载/重新显示,而不是返回给调用者。这可能吗?
来电者代码:
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?????
}
}
}
感谢您的帮助,
答案 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
时,对话框中不会返回任何内容。这意味着模态对话框继续运行。