>伙计们!我在应用程序中有 2 个表单 - 工作表单 (frmMain) 和设置形式 (frmSettings)。frmSettings 上有两个按钮 - 保存和取消。在 frmMain 中,我使用以下方法来显示 frmSettings:
private void btnSettings_Click(object sender, EventArgs e)
{
frmSettings = new SettingsForm();
frmSettings.ShowDialog();
// ...
}
问题是我不知道,如何检测,在frmMain上按下了哪个按钮 - 保存或取消。程序的进一步逻辑取决于这一事实。我需要这样的东西:
private void btnSettings_Click(object sender, EventArgs e)
{
frmSettings = new SettingsForm();
frmSettings.ShowDialog();
if(/* frmSettings.SaveButton.WasClicked == true */)
{
InitializeServices();
}
// ...
}
请给我一个建议,如何实现表单之间的这种交互。最好不要使用全局变量来保存按钮状态。事先谢谢。
ShowDialog 返回一个 DialogResult 对象,该对象允许您知道这一点。您必须:
在"保存"按钮的单击事件中,将this.DialogResult
设置为DialogResult.OK
在"取消"按钮的单击事件中,将this.DialogResult
设置为DialogResult.Cancel
private void btnSettings_Click(object sender, EventArgs e)
{
frmSettings = new SettingsForm();
if(frmSettings.ShowDialog() == DialogResult.OK)
{
InitializeServices();
}
//.......
}
编辑以将对话结果作为@tsiorn的答案进行管理:设置表单的拨号结果,而不是在每个按钮上设置该属性。
你选择使用 DialogResult 来处理这个问题。在表单设置窗口中,您可以按如下方式设置结果:
protected void btnSave_Click(object sender, EventArgs e) {
DialogResult = System.Windows.Forms.DialogResult.OK
this.close;
}
protected void btnCancel_Click(object sender, EventArgs e) {
DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.close;
}
然后。。。
private void btnSettings_Click(object sender, EventArgs e)
{
frmSettings = new SettingsForm();
frmSettings.ShowDialog();
if(frmSettings.DialogResult == DialogResult.OK)
{
// save
InitializeServices();
}
// ...
}
从可能值的枚举开始:
public enum ExitMethod
{
Other, //this should be first, as a default value
Save,
Cancel,
Error
}
然后在该类型的SettingsForm
上创建一个属性:
public ExitMethod ExitMethod { get; private set; }
在SettingsForm的保存/退出方法中,将该属性设置为适当的枚举值,在主窗体中,您可以读取该属性值。
在 frmSettings 窗口中,您可以处理按钮上的单击事件。 然后设置对话框结果:
void frmSettings_Save_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
void frmSettings_Cancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
在主窗体中,您可以执行以下操作来捕获和评估结果:
DialogResult answer = frmSettings.ShowDialog();
if (answer == DialogResult.OK)
{
...
}
可在此处找到其他信息和用法:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult.aspx