有两个窗体Form1,Form2
public class Form1

  public void Set()
  {
    Form2 frm = new Form2();
    if( frm.ShowDialog(this) ==DialogResult.OK)
    {
      ............
    }
  }
}public class Form2

   private void btnOK_Click(object sender, EventArgs e)   //button控件,name为“btnOK”,Text为“确定”
   {
     .......
     .......                                              //一些代码
      this.DialogResult = DialogResult.OK;  
   }
}
也没见在Form2的btnOK_Click的事件中写“this.close()”这样的语句,可是点Form2的“确定”按钮,Form2窗体也就关闭了。这是为什么了?是不是和“this.DialogResult = DialogResult.OK;”语句有关?

解决方案 »

  1.   

    ShowDialog里面有个事件不停的循环接收消息,如果接收的是OK,那么就退出,Show里面没有这个事件
      

  2.   

    是不是和“this.DialogResult = DialogResult.OK;”语句有关? 
    ---------------------------
    是的,这个效果和在按钮上设置DialogResult属性的效果是一样的,系统自动的处理了.
      

  3.   

    应该是 btnOK.DialogResult = DialogResult.OK; 吧,设置按钮为窗体的确定按钮
      

  4.   

    是不是和“this.DialogResult = DialogResult.OK;”语句有关
    ----------------------------------------------------
    这个相当于一个返回值!如果是showdialog()打开的话,就不用this.close()了他会自动关闭的
      

  5.   

    frmMail.cs LOADfrmStart fs = new frmStart();
                        if (fs.ShowDialog() == DialogResult.OK)
                        {
                            _ReadRun_Info = new ReadConfigure(System.Environment.CurrentDirectory + "\\Run_Info.xml");
                            Initialize();
                            this.Enabled = true;
                            this.Show();
                            this.WindowState = FormWindowState.Normal;
                            
                        }
                        else
                        {
                            this.Close();
                        }frmStart.cs btnOK_Click private void btnOk_Click(object sender, EventArgs e)
            {
                try
                {
                    _ReadRun_Info.SetNodeValue("COM_PORT", cobPort.Text);
                    _ReadComInfo.SetNodeValue("PORT", cobPort.Text);
                    _ReadRun_Info.SetNodeValue("PROTOCOL", cobProtocol.Text);
                    _ReadRun_Info.SetNodeValue("CLASS", cboClass.Text);
                    _ReadRun_Info.SetNodeValue("CHECK_TIME", cboCheckTime.Text);
                    _ReadRun_Info.SetNodeValue("UNIT", cboUnit.SelectedIndex.ToString());
                    _ReadRun_Info.SetNodeValue("SAFE_CODE", txtSafeCode.Text.Trim());
                    _ReadRun_Info.SetNodeValue("REPORT_HEAD", txtReport.Text.Trim());
                    _ReadComInfo.SetNodeValue("PORT", cobPort.Text);
                    if (chkStart.Checked)
                    {
                        _ReadRun_Info.SetNodeValue("AUTO_START", "1");
                    }
                    else
                    {
                        _ReadRun_Info.SetNodeValue("AUTO_START", "0");
                    }
                    if (chkOilType.Checked)
                    {
                        _ReadRun_Info.SetNodeValue("CUSTOM_TYPE", "1");
                    }
                    else
                    {
                        _ReadRun_Info.SetNodeValue("CUSTOM_TYPE", "0");
                    }
                    this.DialogResult = DialogResult.OK;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "OPW-SYSTEM(Start)", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
      

  6.   

    通过DialogResult可以简化窗体的操作,楼主可以先看一下这篇文章就清楚了。
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx