关于子窗体的问题

问题描述

就是子窗体的子窗体的嵌套问题。最外层的是整个CS结构的大窗体A,在点击菜单栏,出现第一个子窗体B,接着B的打印功能,又出现一个水晶报表的窗体C。我不清楚的是不是C是B的子窗体,还是A的子窗体。我等下给出代码。关键是在我关闭了C之后,要关闭A的时候,没办法关闭A。这时B已经不见了。是不是因为B没有释放啊?B的构造函数是:publicxszxzm(Formf1){parentForm=f1;this.MdiParent=parentForm;InitializeComponent();}C的构造函数是:publicSelectPrintForm(Formf1,stringxh){this.MdiParent=f1;InitializeComponent();。。。}在线等,谢谢。新手。。。

解决方案

解决方案二:
Bhasbeenhidden?
解决方案三:
C关掉的时候B.Show一下,把B显示出来
解决方案四:
你在B窗体里,怎么样把A给SHOW出来的?
解决方案五:
你在B窗体里,怎么样把C给SHOW出来的?说错了
解决方案六:
我错了。C.SHOW的时候,B已经DISPOSE()了。我刚才调试,也看到了B.DISPOSE了。privatevoidbutton1_Click(objectsender,System.EventArgse){Cpf=newC(parentForm,m_xh);pf.Show();this.Dispose();}这是在B窗体里面点击按钮,弹出C窗口的代码。在这里已经把B给DISPOSE了。不过,我注意到一个问题,因为我做的是两个打印界面。这里设置为B1,B2。如果只打开其中一个,比如B1的时候,用B1调用C1之后,是可以关掉A的。如果是打开B1,调用C1,之后,在打开B2,调用C2,之后,就没办法关掉A1了。但是在打开C2的时候,也是有把B2.DISPOSE.如果把一个水晶报表,直接用左上表的叉关掉,算是DISPOSE了吧.
解决方案七:
你如果都用上面的那一段代码的话,应该没有问题的。你是不是你设置了其他的东西了
解决方案八:
你如果都用上面的那一段代码的话,应该没有问题的。你是不是还设置了其他的东西了.为什么关闭别一个窗体的进修要用左上角的叉呢?但是在打开C2的时候,也是有把B2.DISPOSE.如果把一个水晶报表,直接用左上表的叉关掉,算是DISPOSE了吧.
解决方案九:
就算dispose掉也应该是没问题的,进行一系列的操作之后你是无法focuson主窗体A还是关不掉A?
解决方案十:
也是哦,但是怎么才能FOCUSONA呢?我就是直接把那个水晶报表直接关掉的呢。
解决方案十一:
这个涉及到父窗体的问题,如果你把B,C的父窗体都设成A的话,应该是没有问题的。我认为出现上述情况的原因是:A是B的父窗体,B是C的父窗体,当关掉C之后回溯到父窗体B,但此时B窗体已经不存在了。造成了无法FocusOnA窗体,而且无法进行下一步操作。至于具体的问题就只有自己实际分析了
解决方案十二:
上面说的有道理。我也想过。可是如果那样的话,要怎么做呢?先不要DISPOSEB。觉得奇怪的是,在其他的打印窗口,代码是一样的。可是他们可以操作。先试试。谢谢先
解决方案十三:
我把DISPOSEB注释掉了。可是打印窗口出现,在关掉C后,我没看到B窗口。还是不行的。

时间: 2024-10-29 13:45:58

关于子窗体的问题的相关文章

保证相同类型的MDI子窗体只会被打开一次的方法

看到论坛中有朋友问,如何可以保证在 MDI主窗体中,同一类型的子窗体只能打开一次,再 打开只是将原来打开的窗体激活.这个要求我以前写程序的时候也遇到过.我实现的基本思路 是: 一般每个子窗体都是继承自 Form类型,不同子窗体分别代表不同的功能,因此只需要判断 当前 MDI打开的子窗体的类型中有没有当前需要打开的子窗体类型就行了,如果有,则直接激 活,如果没有则创建一个并加到主窗体中.具体实现起来有很多种办法,这里只写出一个利用 泛型的实现: /// <summary> /// 打开MDI子窗

Delphi中在DLL动态链接库中封装VCL的MDI子窗体

不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下: 1var 2 DllApp: TApplication;//定义保存原DLL的TApplication对象 3 DllScr: TScreen;//定义保存原DLL的TScreen对象 4 5procedure UnProcDll(Reason: Integer); register; 6//重新定义DLL入口函数 7begin 8 if

子窗体刷新父窗体的问题完全解决了,谢谢E版主

实际上我是对showdialog不熟悉所致.光想到传送数据了,就重新了showdialog事件,这样虽然传送了数据,但是却不能使用form.owner方法了.现在的解决方法是:在主窗体中用showdialog(me)调用子窗体,在子窗体中使用:dim f as new form() 'form是主窗体f = me.owner这时就可以调用主窗体的各个控件了,获取数据也很容易了.再次感谢E版主的大力帮助. 

MDI窗体程序中防止子窗体被多次实例化——Singleton的C#实现

程序 晚上逛CSDN论坛的时候,看到C#区有位朋友问"防止MDI子窗体被多次实例化",我随即写了这篇文章. 其实这个问题,就是经典的23种设计模式中的单件模式(Singleton),下面用C#实现之: 首先我们有2个Windows Form,主窗体叫Form1,子窗体叫ChildForm.在主窗体中加入一Menu,用来实例化子窗体,我们在Form1.cs中写入下代码: private static ChildForm childForm; //静态变量,保存唯一实例 private v

vb.net 中MDI子窗体对其父窗体属性的获取与修改

兄弟前些日子做项目,第一次使用vb.net,碰上不少问题,相信很多初学者多多少少都会遇到这些问题,为了初学者学习方便,小弟总结了一些小经验,供大家参考讨论.第一篇:如何在MDI子窗体中控制父窗体的属性等等 功能:比如打开一个子窗体后,就要设置父窗体中的某个菜单项或者按钮为不可见状态,诸如此类. 内容:MDI父窗体和MDI子窗体类定义如下:MDI父窗体:Class MDIForm Inherits System.Windows.Forms.Form......... 'member mnuMain

vb.net 防止MDI子窗体被多次实例化的四种方法

方法一            可能没有什么实用性,只适合简单项目:       Dim frmTmp As ClassForm        "实现已经设计好了一个称作(类名为)ClassForm的表单              frmTmp = New ClassForm          "在此定义它的一个实例         frmTmp.ShowDialog()                "作为模式窗体显示这样在当前窗体没有关闭以前,其他form上的菜单按钮都不可

c#中如何控制模态子窗体中的进度条

这个问题会让一些初学者感到困惑,一方面模态窗体在打开之后(Form.ShowDialog).主线程无法继续执行下面的事务:另一方面,又要在处理事务的时候来同步这个窗体里面的进度条.这两件事情都必须做,却都不能先做... 所以很多人不得不把事务处理写到模态窗体当中去,这样可以达到目的,却造成了代码结构混乱,而且子窗体无法复用,如果有多个事物,不得不为每个事务来写控制窗体. 这里我们介绍一种比较直接了当的方法,就是主线程中开启两个子线程,一个用于显示模态窗体,一个用于处理事务, 并同时更新第一个线程

[WPF]如何在关闭非模态子窗体时用消息框确认:解决最小化窗体时抛出的异常

又是一个看起来很简单的问题.像下面这样在Closing里弹出个MessageBox确认一下不就行了? public static void OnWindowClosing(object sender, CancelEventArgs e) { if (MessageBox.Show(string.Format("Are you sure to close the {0}?", (sender as Window).Title), "Confirm", Message

设置C#子窗体在主窗体中居中显示

问题的开始是由C#传传看主群里的印醒提出来的,下面我来说一下解决方案吧 其实表面上看是很简单的 开始吧,现在有两个窗体Form1主窗体,Form2子窗体 而且我相信大部分人都会这样写 在子窗体的Load事件中 这样写 this.StartPosition = FormStartPosition.CenterParent; 其实这样写是不对的,正确的写法应该是 this.StartPosition = FormStartPosition.CenterScreen; 为什么是CenterScreen

jQuery子窗体取得父窗体元素的方法

  本文实例讲述了jQuery子窗体取得父窗体元素的方法.分享给大家供大家参考.具体如下: ? 1 $("#父窗口元素ID",window.parent.document); 对应javascript版本为 ? 1 window.parent.document.getElementById("父窗口元素ID"); 取父窗口的元素方法: ? 1 $(selector, window.parent.document); 取父窗口的父窗口的元素就可以用: ? 1 $(se