当前位置:编程学习 > C#/ASP.NET >>

C#一个奇怪的问题,期待得到解答

最近在写程序的时候遇到一个问题十分奇怪,我在一个主窗口中(非MDI窗口)新建一个子窗口并显示,关闭子窗口后主窗口也跟着关闭,程序如下:
            if ((DialogResult = MessageBox.Show("是否进行数据处理?", "操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)) == DialogResult.OK)
            {
                task.doTask();
                subForm = new Frm_Report();
                subForm.ShowDialog();
                this.Controls.Find("pb_tick6",true)[0].Visible = true;
            }
当时一直不知道是什么原因,后来抱着试一试的态度将程序改成如下,问题就解决了。
DialogResult result = MessageBox.Show("是否进行数据处理?", "操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (result == DialogResult.OK)
            {
                task.doTask();
                subForm = new Frm_Report();
                subForm.ShowDialog();
                this.Controls.Find("pb_tick6",true)[0].Visible = true;
            }
虽然问题是解决了,我还是希望知道这个问题出现的原因,希望各位能够给予解答,十分感谢! --------------------编程问答-------------------- 纯粹书写习惯问题引起的
你上面的写法其实是
if ((this.DialogResult = MessageBox.Show("是否进行数据处理?", "操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)) == DialogResult.OK)
winform里有时候加上this还是好一些 --------------------编程问答-------------------- 看不出会关闭主窗口,你哪里的代码在关闭主窗口啊? --------------------编程问答-------------------- 晕,它上面的代码把对话框的会话结果直接给了(当前窗体的)DialogResult,只是把this.省掉了而已
改成下面就赋给了临时变量result,
如果它再来个DialogResult = result就变成跟上面一样了 --------------------编程问答-------------------- 既然只需要判断,只需要这样就好了,没必要搞个赋值在里面啊

if (MessageBox.Show("是否进行数据处理?", "操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
--------------------编程问答--------------------
引用 4 楼 dongxinxi 的回复:
既然只需要判断,只需要这样就好了,没必要搞个赋值在里面啊

if (MessageBox.Show("是否进行数据处理?", "操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)


有道理! --------------------编程问答--------------------
引用 2 楼 qldsrx 的回复:
看不出会关闭主窗口,你哪里的代码在关闭主窗口啊?


楼主的代码,还是没有看见有关闭窗体的代码。 --------------------编程问答--------------------
引用 6 楼 qq81867376 的回复:
引用 2 楼 qldsrx 的回复:
看不出会关闭主窗口,你哪里的代码在关闭主窗口啊?


楼主的代码,还是没有看见有关闭窗体的代码。

不好意思啊,今天才看,就是showDialog这个方法执行完以后,我跟踪代码,代码就进入主窗口的formclosed事件里了,我也不太明白为什么~ --------------------编程问答--------------------
引用 3 楼 dongxinxi 的回复:
晕,它上面的代码把对话框的会话结果直接给了(当前窗体的)DialogResult,只是把this.省掉了而已
改成下面就赋给了临时变量result,
如果它再来个DialogResult = result就变成跟上面一样了

我觉得你说的有道理,不过为什么对话框的会话结果直接给了(当前窗体的)DialogResult后,代码会跳转到formclosed事件中,不太理解,能麻烦解释一下么? --------------------编程问答--------------------
引用 4 楼 dongxinxi 的回复:
既然只需要判断,只需要这样就好了,没必要搞个赋值在里面啊

if (MessageBox.Show("是否进行数据处理?", "操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)


up。。 --------------------编程问答--------------------
引用 8 楼 leizicd 的回复:
引用 3 楼 dongxinxi 的回复:

晕,它上面的代码把对话框的会话结果直接给了(当前窗体的)DialogResult,只是把this.省掉了而已
改成下面就赋给了临时变量result,
如果它再来个DialogResult = result就变成跟上面一样了

我觉得你说的有道理,不过为什么对话框的会话结果直接给了(当前窗体的)DialogResult后,代码会跳转到form……


你的当前窗体this是不是通过ShowDialog()显示出来的?如果是的,那肯定会"关闭"了,模态对话框是有会话状态的,你将这个状态赋给他的时候,窗体就会自动隐藏
MSDN:
当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。当用户单击对话框的“关闭”按钮或设置 DialogResult 属性的值时,不会自动调用 Close 方法。而是隐藏该窗体并可重新显示该窗体,而不用创建该对话框的新实例。因为此行为,所以当应用程序不再需要该窗体时,必须调用该窗体的 Dispose 方法。
--------------------编程问答--------------------
引用 10 楼 dongxinxi 的回复:
引用 8 楼 leizicd 的回复:
引用 3 楼 dongxinxi 的回复:

晕,它上面的代码把对话框的会话结果直接给了(当前窗体的)DialogResult,只是把this.省掉了而已
改成下面就赋给了临时变量result,
如果它再来个DialogResult = result就变成跟上面一样了

我觉得你说的有道理,不过为什么对话框的会话结果直接给了(当前窗体的)Di……

十分感谢!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,