【问题标题】:Closing dialog box and form which launched the dialog box关闭对话框和启动对话框的窗体
【发布时间】:2011-04-01 13:38:33
【问题描述】:

我在 winforms 应用程序中有一个表单。当我按下一个按钮时,它会加载一个带有“是”和“否”选项的模式消息框。

这很好,但是当我按否时,我想关闭对话框和启动对话框(发送者)的按钮所在的表单。

所以应用结构是这样的:

主应用程序窗口 > 按菜单项启动新表单(连接设置) > 按此表单上的按钮启动消息框。

打开了两个窗口(连接设置表单和对话框),我都想关闭它们。

我该怎么做?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    在“是-否”模态表单中,只需在按下 按钮时将 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
    }
    

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

    【讨论】:

      【解决方案2】:

      类似这样的:

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

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

      【讨论】:

        【解决方案3】:
         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(); 
                }
        
            }
        

        【讨论】:

          【解决方案4】:

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

          MBox1 = New MBox(ParentForm sender);
          

          那么在消息框中你可以这样做:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-04
            • 1970-01-01
            • 2017-06-04
            • 1970-01-01
            • 2013-07-26
            • 1970-01-01
            相关资源
            最近更新 更多