有关.ShowDialog() 打开窗体,关闭问题 是这样的问题,我有个主窗体,main,在main中用form1.ShowDialog() 打开form1,然后在form1中用form2.ShowDialog() 打开form2.,现在我在form2中执行this.close();结果form2和form1都关闭了。其实我只希望关闭form2,请问这是什么原因?如何解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你用form2.close();试一下。这样或许能改正过来。如果还是不行的话。那只能说明你代码有问题。 是不是Form1打开Form2时,form2.ShowDialog()之后加了this.Close() 明白了,你是在form2.ShowDialog();后面加this.Close();那是你的错啦,你把这个this.Close();放在form1中写就代表this是form1了 main里面是button里的代码: addgoodstype addgoodstype1 = new addgoodstype(); addgoodstype1.ShowDialog();没有其他代码了,form1里面也是button的代码 addgoodstype addgoodstype1 = new addgoodstype(); addgoodstype1.ShowDialog();也是这样的格式。而form2里有个button_cancel,就写了个this.close();执行后就出现上面的情况;另外:开始的时候,我把button_cancel设置为窗体的cancel控件了,觉得怕这里的问题取消了,还是问题依然 main的代码(主窗体,也是mdi父窗体): private void btgoods_Click(object sender, EventArgs e) { GoodsType GoodsType1 = new GoodsType(); GoodsType1.ShowDialog(); GoodsType1.Dispose(); }GoodsType的代码(不是mdi子窗体): private void btadd_Click(object sender, EventArgs e) { addgoodstype addgoodstype1 = new addgoodstype(); addgoodstype1.ShowDialog(); addgoodstype1.Dispose(); //绑定dgvGoodsTypeInfoBind用户信息 dgvgt.Refresh(); dgvGoodsTypeInfoBind(); }addgoodstype 的代码: private void btno_Click(object sender, EventArgs e) { this.Close(); } Dispose();方法是有问题后加上去了,加上后还是有问题,比较奇怪 GoodsType1.ShowDialog(); GoodsType1.Dispose(); 这是什么啊?吧窗体弹出来了。又销毁了。没有问题才怪。 晕~~~~~~~~窗体弹出来后,要执行完窗体所有操作,退出后才执行goodstype1.dispose();还有上面说了,这个也是有问题后才加上去的 代码不能那么写啦.........main的代码(主窗体,也是mdi父窗体): private void btgoods_Click(object sender, EventArgs e) { GoodsType GoodsType1 = new GoodsType(); if(GoodsType1.ShowDialog() == DialogResult.OK) { //GoodsType 中的某个按钮设置的DialogResult的属性设置成OK GoodsType1.Dispose(); } } GoodsType的代码(不是mdi子窗体): private void btadd_Click(object sender, EventArgs e) { addgoodstype addgoodstype1 = new addgoodstype(); if(addgoodstype1.ShowDialog() == DialogResult.OK) { //form2 中的某个按钮的DialogResult的值设置为OK 只有点击了这个按钮才会执行这里面的代码 addgoodstype1.Dispose(); //绑定dgvGoodsTypeInfoBind用户信息 dgvgt.Refresh(); dgvGoodsTypeInfoBind(); } } addgoodstype 的代码: private void btno_Click(object sender, EventArgs e) { this.Close(); } //楼主的问题自己看出来了没, 没加任何限制,代码最终还是会执行到 GoodsType1.Dispose(); 的 楼主代码执行路线..........main的代码(主窗体,也是mdi父窗体): private void btgoods_Click(object sender, EventArgs e) { GoodsType GoodsType1 = new GoodsType(); //第一步 GoodsType1.ShowDialog(); //第二步 暂时堵塞在这里 等show出来的东西完了再执行下面的GoodsType1.Dispose(); GoodsType1.Dispose(); //第九步 } GoodsType的代码(不是mdi子窗体): private void btadd_Click(object sender, EventArgs e) { addgoodstype addgoodstype1 = new addgoodstype(); //第三步 addgoodstype1.ShowDialog(); //第四步 addgoodstype1.Dispose(); //第六步 //绑定dgvGoodsTypeInfoBind用户信息 dgvgt.Refresh(); //第七步 dgvGoodsTypeInfoBind(); //第八步 这里完了 还是会到第9步去的 所有关闭了 } addgoodstype 的代码: private void btno_Click(object sender, EventArgs e) { this.Close(); //第五步 虽然这里关闭了 但还是回到第6步 } 分析很有道理,但是我不加.Dispose();也一样全部关闭了,这个又是什么问题,也是我要问题的,因为是有问题才加的.Dispose(); 还是在窗体没有执行this.close()时,ShowDialog也应该没有执行完,也就不会执行到Dispose,也就是分析上的第八步执行完后,并没有执行this.close()或其他关闭操作,也就是第二步应该还继续堵塞,不应该执行第九步。问题就在这里,他继续执行了 看下form1 中的 btadd 按钮的DialogResult(属性栏里看) 的值是不是None 不是None 改成None ,其他的值的话都会继续执行的(不需要关闭form1的代码 form1也会关闭的) 楼主再仔细看看吧,正常情况下,这样写不会出问题的,一定是哪个地方的代码除了问题,首先仔细找找addgoodstype 里面的代码 如果LZ窗体不多 操作不多的话就干脆不要关 窗体 直接用 this.Hide() 正确问题方式,正式这里设置了默认cancel,故继续执行了,^_^,问题找到了,感谢各位支持!!! 复杂的含有合并单元格的Excel如何遍历,为每个单元格赋值 接口转换问题 怎么调用API中的GDI32下的FloodFIll函数. 用循环查看文件创建日期 sqlserver如何分页? 正则式问题!!! 怎么在richTextBox选中指定一行字符.... dataTable.Select()用法 为什么DataGrid 点编辑按钮后,datagrid消失了 winform程序datagridview中鼠标滚轮事件的问题 WebChart控件如何设置坐标原点。 C#根据word模板中表格,动态插入多个表格,高分求解
如果还是不行的话。那只能说明你代码有问题。
后面加
this.Close();
那是你的错啦,你把这个this.Close();放在form1中写就代表this是form1了
addgoodstype addgoodstype1 = new addgoodstype();
addgoodstype1.ShowDialog();
没有其他代码了,
form1里面也是button的代码
addgoodstype addgoodstype1 = new addgoodstype();
addgoodstype1.ShowDialog();
也是这样的格式。
而form2里有个button_cancel,就写了个this.close();执行后就出现上面的情况;
另外:开始的时候,我把button_cancel设置为窗体的cancel控件了,觉得怕这里的问题取消了,还是问题依然
private void btgoods_Click(object sender, EventArgs e)
{
GoodsType GoodsType1 = new GoodsType();
GoodsType1.ShowDialog();
GoodsType1.Dispose();
}
GoodsType的代码(不是mdi子窗体):
private void btadd_Click(object sender, EventArgs e)
{
addgoodstype addgoodstype1 = new addgoodstype();
addgoodstype1.ShowDialog();
addgoodstype1.Dispose();
//绑定dgvGoodsTypeInfoBind用户信息
dgvgt.Refresh();
dgvGoodsTypeInfoBind();
}
addgoodstype 的代码:
private void btno_Click(object sender, EventArgs e)
{
this.Close();
}
GoodsType1.Dispose(); 这是什么啊?吧窗体弹出来了。又销毁了。没有问题才怪。
还有上面说了,这个也是有问题后才加上去的
main的代码(主窗体,也是mdi父窗体):
private void btgoods_Click(object sender, EventArgs e)
{
GoodsType GoodsType1 = new GoodsType();
if(GoodsType1.ShowDialog() == DialogResult.OK)
{
//GoodsType 中的某个按钮设置的DialogResult的属性设置成OK
GoodsType1.Dispose();
}
}
GoodsType的代码(不是mdi子窗体):
private void btadd_Click(object sender, EventArgs e)
{
addgoodstype addgoodstype1 = new addgoodstype();
if(addgoodstype1.ShowDialog() == DialogResult.OK)
{
//form2 中的某个按钮的DialogResult的值设置为OK 只有点击了这个按钮才会执行这里面的代码
addgoodstype1.Dispose();
//绑定dgvGoodsTypeInfoBind用户信息
dgvgt.Refresh();
dgvGoodsTypeInfoBind();
}
}
addgoodstype 的代码:
private void btno_Click(object sender, EventArgs e)
{
this.Close();
} //楼主的问题自己看出来了没, 没加任何限制,代码最终还是会执行到 GoodsType1.Dispose(); 的
main的代码(主窗体,也是mdi父窗体):
private void btgoods_Click(object sender, EventArgs e)
{
GoodsType GoodsType1 = new GoodsType(); //第一步
GoodsType1.ShowDialog(); //第二步 暂时堵塞在这里 等show出来的东西完了再执行下面的GoodsType1.Dispose();
GoodsType1.Dispose(); //第九步
}
GoodsType的代码(不是mdi子窗体):
private void btadd_Click(object sender, EventArgs e)
{
addgoodstype addgoodstype1 = new addgoodstype(); //第三步
addgoodstype1.ShowDialog(); //第四步
addgoodstype1.Dispose(); //第六步
//绑定dgvGoodsTypeInfoBind用户信息
dgvgt.Refresh(); //第七步
dgvGoodsTypeInfoBind(); //第八步 这里完了 还是会到第9步去的 所有关闭了
}
addgoodstype 的代码:
private void btno_Click(object sender, EventArgs e)
{
this.Close(); //第五步 虽然这里关闭了 但还是回到第6步
}
就干脆不要关 窗体
直接用 this.Hide()
正确问题方式,正式这里设置了默认cancel,故继续执行了,^_^,问题找到了,感谢各位支持!!!