有两个窗体,form1,form2,在form1中button1有一个单击的方法 private void button1_Click(object sender, EventArgs e)
        {
            Form1 f2 = new Form2();
            DialogResult dr = f2.ShowDialog();
            if (dr == DialogResult.OK)
            {
                MessageBox.Show("OK");
            }
            else
                MessageBox.Show("Cancel");
        }现在form2中有两个方法.
        private void button1_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }        private void button2_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
        }如果只单击这两个按纽,返回的结果当然 ok 或是 cancel 了.现在有个问题,就是在你关闭窗口时,即关右上角的叉时,返回 cancel了.请用最少的代码完成这一任务.

解决方案 »

  1.   

    需要修改 方法 button1_Click 和方法 button2_Click
      

  2.   

    设置Form的CancelButton为button2即可
      

  3.   


    FormClosing你得设置吧,否则点关闭那个叉,怎么返回cancel?如果你设置了 FormClosing ,默认在DialogResult 后会再次调用 FormClosing .这个不能解决.
      

  4.   

    override窗体的onClosing事件,在调用基类的关闭事件前加
    this.DialogResult = DialogResult.Cancel;
      

  5.   

     this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.事件);  void 事件(object sender, System.Windows.Forms.FormClosingEventArgs e)
    {this.DialogResult = DialogResult.Cancel;
    }
      

  6.   

    是我没说清楚,在返回 cancel 时,需要有提示的,也就是点button2和关闭窗口要有提示的,如private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                               if (MessageBox.Show("退出", "?", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK)  e.Cancel = true;                    }
      

  7.   

    也就是说,如果在取消时选择不取消,原窗口还是打开的,并不关闭和返回结果.只有选了确认退出,才返回cancel
      

  8.   


            protected override void OnFormClosing(FormClosingEventArgs e)
            {
                if (MessageBox.Show("确定要关闭","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information) != DialogResult.OK)
                {              
                    e.Cancel = true;
                }
                base.OnFormClosing(e);
            }
      

  9.   

    转到另一个帖子了http://topic.csdn.net/u/20091226/22/461abbc6-2869-41a2-83d0-f22ee845ff85.html