【发布时间】:2011-04-01 13:38:33
【问题描述】:
我在 winforms 应用程序中有一个表单。当我按下一个按钮时,它会加载一个带有“是”和“否”选项的模式消息框。
这很好,但是当我按否时,我想关闭对话框和启动对话框(发送者)的按钮所在的表单。
所以应用结构是这样的:
主应用程序窗口 > 按菜单项启动新表单(连接设置) > 按此表单上的按钮启动消息框。
打开了两个窗口(连接设置表单和对话框),我都想关闭它们。
我该怎么做?
【问题讨论】:
我在 winforms 应用程序中有一个表单。当我按下一个按钮时,它会加载一个带有“是”和“否”选项的模式消息框。
这很好,但是当我按否时,我想关闭对话框和启动对话框(发送者)的按钮所在的表单。
所以应用结构是这样的:
主应用程序窗口 > 按菜单项启动新表单(连接设置) > 按此表单上的按钮启动消息框。
打开了两个窗口(连接设置表单和对话框),我都想关闭它们。
我该怎么做?
【问题讨论】:
在“是-否”模态表单中,只需在按下 否 按钮时将 DialogResult 设置为 否,例如:
private void noButton_Click(object sender, EventArgs e)
{
this.DialogResult = System.Windows.Forms.DialogResult.No;
}
当你点击否
时模态表单会自动关闭然后,当您打开模态表单时,请执行以下操作(在连接设置表单中):
var modalForm = new YesNoForm();
if (modalForm.ShowDialog() == DialogResult.No)
{
this.Close(); // close the connection setup form
}
编辑
我认为你的 yes-no 模态表单是自定义的,如果它是一个简单的 MessageBox,就这样做:
var dlgResult = MessageBox.Show("Yes or no ?","?",MessageBoxButtons.YesNo);
if(dlgResult == System.Windows.Forms.DialogResult.No)
{
this.Close(); // close the connection setup form
}
正如其他答案中已经建议的那样
【讨论】:
类似这样的:
DialogResult result = MessageBox.Show("dialog", "modal", MessageBoxButtons.YesNo);
if (result == DialogResult.No)
{
this.Close();
}
对于自定义模式对话框,代码类似。
【讨论】:
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
if (richTextBox1.Text != "")
{
if (DialogResult.Yes == MessageBox.Show(("Do you want to save changes to Untiteled"), "Notepad", MessageBoxButtons.YesNoCancel))
{
saveFileDialog1.ShowDialog();
FileStream fs = new FileStream(saveFileDialog1.FileName + ".txt", FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(richTextBox1.Text);
sw.Close();
fs.Close();
}
else if (DialogResult.No == MessageBox.Show(("Do you want to save changes to Untiteled"), "Notepad", MessageBoxButtons.YesNoCancel))
{
richTextBox1.Clear();
}
else if (DialogResult.Cancel == MessageBox.Show(("Do you want to save changes to Untiteled"), "Notepad", MessageBoxButtons.YesNoCancel))
{
***//when i click on cancel button...the dialogbox should be close??????????????????????***
}
}
else
{
richTextBox1.Clear();
}
}
【讨论】:
我不知道C#是否有相同的行为,但是在Java中我修改了消息框的构造函数,并传递了对发送者表单的引用。
MBox1 = New MBox(ParentForm sender);
那么在消息框中你可以这样做:
sender.close(); //or whatever
this.close();
这些示例更像“伪代码”,但我希望它有所帮助
【讨论】: