• 全部
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API
  • 问答

在父窗体中,如何处理多个子窗体的连接和关闭问题?讨论!!!

yzjd 2005-03-04 01:53:49
在父窗体中,如何处理多个子窗体的连接和关闭问题,也就是父窗体中打开了多个子窗体。如何处理多个子窗体的连接和关闭问题。
...全文
266 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yzjd 2005-03-07
楼上说的不错!
回复
华芸智森 2005-03-07
第一节讲的是一个窗体的类的问题,第两节讨论的是两窗体间的切换

(其实也可以引申为多窗体间的切换),这节讨论一下多窗体的问题。



这是vb.net版上一位网友发的询问贴,内容如下:

VB6中可以用
Dim frm As Form
For Each frm In Forms
  ……
Next frm
来取得窗口集合.这个功能在VB.NET中该怎样来完成呢?
先来分析一下Forms的含义与作用:

Forms是一个collection(集合),其元素是进程中被加载的Form。

包括MDI Form,MDI Child Form和non-MDI Form。

Forms集合只有一个属性,就是Count,表明了该集合中有多少元素。

为了达到要求,应该添加自己的forms集合.
添加一个新的module, 然后在module中写入:
Module FormsCollection
Public Forms As New FormsCollectionClass() ‘类定义在后
End Module
  添加一个类模块:
Class FormsCollectionClass

Implements Ienumerable

‘Implements 关键字用于对类成员实现特定接口进行界定。
‘为使用For each功能,要实现Ienumerable接口,表示公开枚举数,
该枚举数支持在集合上进行简单迭代。
Private c As New Collection()

‘Collection 对象提供了一种将一组相关项作为一个对象进行引用的便捷方法。集合中的项

(或成员)只需要存在于集合中即可成为相关项。集合中的成员不需要具有相同的数据类型。

它有两个方法:用Add添加元素,和用Remove从集合中删去元素。它有两个属性:

用count来记录元素数目,用只读属性Item返回Collection 对象的特定成员的位置或键



Sub Add(ByVal f As Form) ‘向集合中添加元素的方法

Dim itemCount As Integer

For itemCount = 1 To c.Count

      ‘判断f是否在forms中,如果在则不加入

If f.Name = CType(c.Item(itemCount), Form).Name Then

Exit Sub

End If

Next

c.Add(f)

End Sub



Sub Remove(ByVal f As Form) ‘向集合中删除元素的方法

Dim itemCount As Integer

For itemCount = 1 To c.Count

       ‘判断f是否在forms中,如果在则删除掉

If f.Name = CType(c.Item(itemCount), Form).Name Then

c.Remove(itemCount)

Exit For

End If

Next

End Sub



ReadOnly Property Item(ByVal index) As Form ‘返回集合中某个位置的内容

Get

Return c.Item(index)

End Get

End Property



ReadOnly Property count() As Integer ‘集合中元素数目的记录

Get

Return c.Count()

End Get

End Property



Overridable Function GetEnumerator() As _

IEnumerator Implements IEnumerable.GetEnumerator

‘返回可循环访问集合的枚举数。一旦为类定义了Ienumerable接口,就必须要重写

GetEnumerator。调用 GetEnumerator 时,它将构建一个枚举数对象,其中包含集合中

的当前版本号以及对集合项的引用。每次访问枚举数时,它都会将枚举数的版本与集合

的版本进行比较。如果版本不匹配,则认为集合被更改,从而发生异常。



Return c.GetEnumerator

End Function

End Class

通过这个类,你可以获得自已的 collection of forms. 现在的Forms具有
collection与枚举的特点。即从 collection中增加或删除相应的form
在主程序中form1的 New 过程中(被region折起来了,详见本系列讨论的第一节),
加入下一句:
Forms.Add(Me)
需要注意的是:
这一句话应该要加在InitializeComponent()之后。这是因为,我们防止重复
加入一个form的手段是运用form的name进行判断的。而正如我在第一节中所
描述的那样,系统把初始化的内容,包括name是写在InitializeComponent()
子过程中的。由于每new一个实例,都会调用它一次,所以必须在add方法中
加入判断重复性的内容。
在 Dispose 方法中,加入下一句:
Forms.Remove(Me)
在这里,我们可以回顾一下第一节中谈到的析构的问题,由于Forms是全局的,
所以当一个form关闭时,它并没有退出生存期,所以应该将关闭的这个form
从集合中删除掉。为什么关闭时会调用Dispose方法的问题请回头看一下第一节。
你的程序中如果有很多个form,你要在每个form的New与dispose方法里中加入上两句
接下来你就可以使用了:
Dim frm As Form
For Each frm In Forms
If frm.Name = "Form2" Then
frm.Close()
End If
Next
现在的forms比以前那一个Count属性的集合使用方法更灵活,内容更多。当然损失的是自动的功能。

在多窗体中使用时,还是请参看第二节的使用方法,综合考虑一下。
回复
华芸智森 2005-03-07
自己做一个类似FORMS的类来管理你的窗体。
回复
T2 2005-03-07
不要每次都Open 数据库,Open一次就够了
回复
hamadou 2005-03-05
不明白什么意思!
回复
mycoldboy 2005-03-05
up
回复
landlordh 2005-03-05

你可以判断连接状态,再去看要不要open
回复
yzjd 2005-03-05
父窗体下有多个子窗体,一个子窗体用来增加操作员!一个子窗体用来增加资料!一个子窗体用来查询资料。
每个窗体都具备打开数据库和关闭数据库的功能。
现在的问题是,我打开多个子窗体,如果其中一个子窗体没有关闭,接着打开另一个子窗体,系统提示连接已经打开。数据库是SQL SERVER。
对这种情况该怎么处理?
回复
xinminhuibaobao 2005-03-04
单一类模式。引用一个全局变量来打开。或者使用互斥锁。
回复
yuhang001 2005-03-04
你是说的数据库连接和关闭吗?如果是那你就把每个子窗体要用到的数据集都在父窗体中查出来,放到一个
动态数组或一个公共类中不就可以了吗?这样你只要在父窗体中操作数据库就可以了。
回复
T2 2005-03-04
连接什么?数据库?
回复
yzjd 2005-03-04
我是说打开了多个子窗体。每个子窗体都有打开连接和关闭连接。如果有一个子窗体没有关闭连接,其他子窗体就会提示连接已经打开。对这种情况如何处理啊?
回复
jtl510 2005-03-04
try
{
this.MdiChildren[0].Show();
}
catch
{
f2=new Form2();
f2.MdiParent = this;
f2.Show();
}
多个可以参考做拉
回复
Night_Elf 2005-03-04
没大明白,不知多个子窗体是个如何连接法!
回复
amendajing 2005-03-04
mark
回复
相关推荐
前端面试题
你做的页面哪些流览器测试过?这些浏览器的内核分别是什么? 21 每HTML文件里开头都有很重要的东西,Doctype,知道这是干什么的吗? 21 Quirks模式是什么?它Standards模式有什么区别 21 div+css的布局较...
C#基础教程-c#实例教程,适合初学者
本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言...
WPF开发教程
------WPF开发教程 目录 WPF基础入门....... 1. WPF基础之体系结构......2. WPF基础之XAML....3. WPF基础之基元素......4. WPF基础之属性系统......5. WPF基础之路由事件......7. WPF基础之样式设置模板化... ...
HTML窗体指南
2016.02.28 - 04.06 个人英文阅读练习笔记...02.28 ...HTML表单是一能跟用户交互的强大工具;然而,由于历史技术原因,如何充分使用它们总不是那么的显著。本指南将覆盖HTML表单的所有方面,从结构到风格,从数据操
通过C++ Interop把Windows窗体集成到MFC应用程序
MSDN Mag 2006.05. 原文出处:Mix And Match: Integrate Windows Forms Into Your MFC Applications Through C++ Interop 翻译:Steven Xiong ...通过C++ Interop把Windows窗体集成到MFC应用程序 M...
Qt 窗口窗口切换,窗口间传值
本人代码 win_win.pro 文件 #------------------------------------------------- # # Project created by QtCreator 2016-09-04T13:33:26 # #------------------------------------------------- ...
Microsoft .NET Compact Framework 开发常见问题解答 - 专注.NET技术及其相关应用开发! - 博客园...
Microsoft .NET Compact Framework 开发常见问题解答 发布日期: 3/30/2005 | 更新日期: 3/30/2005 Microsoft .NET Compact Framework 开发的常见问题解答。 这 FAQ 有部分是通过编辑公共 .NET Compact Framework...
【C#】利用C#窗体与SQL Server的连接、Treeview制作SQL Server数据库查看器
实质上,本文的中心还是在讨论C#对SQL Server的增删改查,只是这次创新一点,配合Treeview制作SQL Server数据库查看器。 具体如下图: 根据SQL Server,Test数据库的表的结构与内容: 编写一对Test数据库...
Visual Basic快捷教程——Visual Basic 2017 破冰
Visual BASIC,顾名思义,就是可视化的BASIC。它是美国微软公司推出的一种针对...无论是开发功能强大、性能可靠的商业应用软件,还是编写用于处理具体问题的实用小程序,Visual BASIC都是最快速、最简便的开发工具
C++ 面试题大全
1.new、delete、malloc...delete会调用对象的析构函数,new对应,free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存释放内存。对于非内
主窗体里面打开子窗体&&打印饼图《Delphi 6数据库开发典型实例》--图表的绘制...
1、主窗体里面打开子窗体:ShowForm(Tfrm_Print); procedure Tfrm_Main.ShowForm(AFormClass:TFormClass); begin with AFormClass.Create(Self) do try ShowModal; // 阻塞或者模态窗口,只有你把当前...
windows sdk 窗体和消息
窗口消息   前两章,程序使用了同一函数MessageBox来向使用者输出文字。MessageBox函数会建立一「窗口」。Windows,「窗口」一词有确切的含义。一窗口就是屏幕上的一...
.net中窗体之间的数据交换总结
Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET ...一Windows窗体就代表了.NET架构里的System.Windows.Forms.Form类的一实例。作者CSDN技术论坛.NET板块下的C#分类经常看到有人问起如何
Android经典71道笔试题,命中率超大!
本文为开发者奉献了71道经典Android面试题加答案–重要知识点几乎都涉及到了,你还等啥,赶紧收藏吧!!1. 下列哪些语句关于内存...D、 内存回收程序可以指定的时间释放内存对象2. 下面异常是属于Runtime Exception 的
android 经典java笔试面试题很详细不看后悔!
 A、 程序员必须创建一线程来释放内存  B、 内存回收程序负责释放无用内存   C、 内存回收程序允许程序员直接释放内存   D、 内存回收程序可以指定的时间释放内存对象  2. 下面异常是属于Runtime ...
Team Foundation 的带编号的错误事件消息
Team Foundation 的带编号的错误事件消息
(1.6w字)浏览器灵魂之问,请问你能接得住几
作为一合格的前端工程师,浏览器相关的工作原理是我们进行性能优化的基石,我之前也强调过知识体系的重要性,这部分原理性的内容就是知识体系的重要部分,必须牢牢掌握才能面对瞬息万变的实际场景,针对性地给出...
net面试题(答案可是花了好几天整理的噢!)
答:private 私有成员 该类的内部才可以访问 Protected 保护成员 该类中和该类的继承类可以访问 Public 公共成员 完全公开,没有访问权限 Internal 同一命名空间内可以访问 2、列举ASP.NET 页面
(1.6w字)浏览器与前端性能灵魂之问,请问你能接得住几
作为一合格的前端工程师,浏览器相关的工作原理是我们进行性能优化的基石,我之前也强调过知识体系的重要性,这部分原理性的内容就是知识体系的重要部分,必须牢牢掌握才能面对瞬息万变的实际场景,...
Android面试常问的问题
1.android,请简述jni的调用过程。 1)安装下载Cygwin,下载 Android NDK 2)ndk项目JNI接口的设计 3)使用C/C++实现本地方法 4)JNI生成动态链接库.so文件 5)将动态链接库复制到java工程,java工程调用,...
详解MFC框架窗口、文档视图
尽管窗口、文档视图是MFC的基础,但可能也是最不容易理解的部分,因为其概念比传统编程所需要的Windows函数更强一些,因此,须本章做进一步详细讨论框架窗口、文档视图的方法技巧。 6.1框架窗口 分两类:...
(1.6w字)浏览器与前端性能灵魂之问,请问你能接得住几?(上)
作为一合格的前端工程师,浏览器相关的工作原理是我们进行性能优化的基石,我之前也强调过知识体系的重要性,这部分原理性的内容就是知识体系的重要部分,必须牢牢掌握才能面对瞬息万变的实际场景...
史上最详细的23设计模式解析,一不落,理论搭配简单案例,更好理解哦
亚历山大(Christopher Alexander)他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、...
WINDOWS程式设计--窗体和消息机制
视窗讯息前两章,程式使用了同一函式MessageBox来向使用者输出文字。MessageBox函式会建立一「视窗」。Windows,「视窗」一词有确切的含义。一视窗就是萤幕上的一矩形区域,它接收使用者的输入并以...
2011版C++面试宝典!(值得收藏)
1.new、delete、malloc、free关系 delete会调用对象的析构函数,new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/...对象创建的同时要自动执行构造函数,对象消亡之前要...
汇编有趣的问题
①链表反转单向链表的反转是一经常被问到的一面试题,也是一非常基础的问题。比如一链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一辅助指针,存储遍历...
FFmpegAndroidDemo.zip
ffmpeg-3.3.1移植到android平台
光模块基础知识
光模块内部发射与接收的专业讲解,利于新手快速开发。
android 登陆界面例子
android 登陆界面例子 可以直接运行的
Qt图形视图框架详解
介绍Qt中的Graphics View Framework,涉及View、Scene、Item的关系,如何自定义QGraphicsItem、处理Item之间的关联、如何布局及定义自己的布局Item、如何变幻Item、如何应用动画、如何处理拖放、如何给Item应用图形效果,提供拼图游戏、画板两个有用的实例。 通过本课程的学习,能够掌握Qt Graphics View Framework的基本应用,使用图形视图框架开发需要丰富的GUI效果的应用软件以及需要维护大量图元的、对图形界面层次要求较高的应用。
发帖
VB
创建于2007-09-28

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
帖子事件
创建了帖子
2005-03-04 01:53
社区公告
暂无公告