关闭启动对话框和表格的对话框

5
我有一个winforms应用程序中的表单。当我按下按钮时,它会加载一个带有“是”和“否”选项的模态消息框。
这很好,但是当我按下“否”时,我想关闭启动对话框(发送者)的窗体和对话框框本身。
因此,应用程序结构如下:
主应用程序窗口>按菜单项启动新表单(连接设置)>在此表单上按按钮以启动消息框。
打开两个窗口(连接设置表单和对话框框),我都想关闭。
我该怎么做?
4个回答

20
在你的是/否模态表单中,只需在按下“否”按钮时将DialogResult设置为No,例如:
private void noButton_Click(object sender, EventArgs e)
{
    this.DialogResult = System.Windows.Forms.DialogResult.No;
}

当你点击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
}

正如其他回答中已经建议的那样


4

类似这样的:

DialogResult result = MessageBox.Show("dialog", "modal", MessageBoxButtons.YesNo);
if (result == DialogResult.No)
{
      this.Close();
}

对于自定义模态对话框,代码将类似。


2
 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(); 
        }

    }

0

我不知道C#是否有相同的行为,但在Java中,我修改了消息框的构造函数,并传递了发送者表单的引用。

MBox1 = New MBox(ParentForm sender);

然后在消息框中可以这样做:

sender.close(); //or whatever
this.close();

这些示例更像是“伪代码”,但我希望它能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接