家伙! 我在应用程序中有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();
}
// ...
}
请给我一个建议,如何在表格之间实现这种互动。不使用全局变量保存按钮状态更好。 先谢谢。
答案 0 :(得分:3)
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();
}
//.......
}
编辑管理DialogResult为@ tsiorn的答案:设置表单的DialgoResult,并在每个按钮上设置该属性。
答案 1 :(得分:1)
您应该使用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();
}
// ...
}
答案 2 :(得分:0)
首先列举可能的值:
public enum ExitMethod
{
Other, //this should be first, as a default value
Save,
Cancel,
Error
}
然后在该类型的SettingsForm
上创建一个属性:
public ExitMethod ExitMethod { get; private set; }
在SettingsForm的save / exit方法中,将该属性设置为适当的枚举值,并在主窗体中读取该属性值。
答案 3 :(得分:0)
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