【问题标题】:Closing a background form from a custom message box从自定义消息框关闭后台表单
【发布时间】:2014-02-04 15:22:08
【问题描述】:

简要说明: 无法通过单击 form2 上的按钮来关闭 form1。

我有以下表格:

form1 formMessageBox 其中有 button1 form3

我想: 从form1 弹出formMessageBox(这工作正常)然后从formMessageBox,单击button1 关闭form1 并打开form3

我使用了多种技术,但无法定位 form1

非常感谢您的帮助。

编辑

form1 和消息框同时打开时。当单击 button1 尝试关闭 form1 时,Form1 不会关闭或隐藏。

【问题讨论】:

  • 您有什么不向我们展示您使用的“各种技术”的吗?
  • 目前无法访问我的代码。但是我尝试过
  • 如果你提供你的代码会很有用。
  • formMessageBox 是什么,它属于 form1 吗?如果是这样,您将无法从其模式对话框formMessageBox 中关闭form1。我会研究DialogResult
  • @JP:编辑了你的问题。不要在标题中包含标签!!!

标签: c# .net winforms visual-studio-2010


【解决方案1】:

不太确定你在寻找什么,但我认为你需要这样的东西。

假设您有Form1,然后使用ShowDialog() 弹出formMessageBox

public class Form1 : Form
{
    if (somethingHappened)
    {
        var formMessageBox = new FormMessageBox();

        //ShowDialog() sets the formMessageBox object as a modal dialog owned by Form1 
        DialogResult result = formMessageBox.ShowDialog();

        //Assuming you have OK buttons or something like that in formMessageBox
        if (result == DialogResult.OK)
        {
            var form3 = new Form3();

            /*Can't use this.Close() here as it would close the entire application
            Just hide it and don't forget to dispose of it later when you actually
            want the application to close*/
            this.Hide();

            form3.Show();


        }
    }
}

然后在您的formMessageBox 代码中,根据发生的情况设置DialogResult

public class FromMessageBox : Form
{
    private void okButton_Click(object sender, EventArgs e)
    {
         //Do some stuff
         this.DialogResult = DialogResult.OK
         this.Close();
    }
 }

【讨论】:

  • 所以上面上下文中的这个关键字是指打开消息框的表单?
  • 是的,这是当前类实例的占位符。所以在Form1 的上下文中:this = form1。在FormMessageBoxthis=formMessageBox的上下文中。
  • Form1 代码中的注释假定Form1 是您的应用程序的入口点。如果不是,那么您可以拨打this.Close()
  • 好的,我认为这应该可行。这听起来合乎逻辑地适合我想做的事情。今晚会检查并做出相应的回应。
  • 很好,希望对您有帮助 =)
猜你喜欢
  • 2012-09-07
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多