当前位置:编程学习 > VB >>

子窗体在VB6里如何实现

在VB6里如何实现子窗体?

注意,我说的是ACCESS里那种子窗体,它和VB6的MDI子窗体不一回事。

简单的说,ACCESS里的子窗体相当于在父窗体上开了个小窗,里面是另外一个窗体。子窗体和父窗体通过一定的字段关联更新,但是子窗体又自成一格、相对独立。子窗体可以在单独的窗体设计视图里进行设计,在父窗体里只显示为一个占位的方框。也就是,子窗体本身是一个完整的窗体,你可以在运行时把父窗体的子窗体替换为另外一个窗体。另外,,在父窗体的设计视图里可以随意调整子窗体的位置和大小

在VB6里似乎没有这种东西。那么在VB6里要实现这些,我是不是只能用一堆数据绑定的控件来模拟?

先放30分,如果复杂,再加分。谢谢楼下各位先。 --------------------编程问答-------------------- 下面这个图就是ACCESS窗体的示例。这个ACCESS窗体左边是一个TreeView控件,右边是一个Tab控件。子窗体放在Tab控件上。

--------------------编程问答-------------------- 上面图太宽了,看这个:

--------------------编程问答-------------------- UP --------------------编程问答-------------------- 3次回复了,帮顶  --------------------编程问答-------------------- 用 UserControl
相对独立,可以放在其他容器上。 --------------------编程问答-------------------- 恩。谢谢。

再进一步请教一下,就上面这个界面,你看它有一组互相相关的ActiveX控件。比如,我要点树节点,子窗体控件就要自动更新相关的内容。这种相关性也是固定的。

我想把这一套东西变成可重用的,我是把它做成一个什么东西呢?是像Excel那样的东西么?

我要重用的是这一组控件和背后对数据库的信息进行组织管理的逻辑。 --------------------编程问答-------------------- 这有点跑题了,因为不想重复发图了,我再另外加分吧。 --------------------编程问答--------------------
引用 5 楼 tiger_zhao 的回复:
用 UserControl
相对独立,可以放在其他容器上。

顶。
如果想关联 可以把两部分做成整体的自定义控件 --------------------编程问答-------------------- 做成控件,不同的表名、字段名作为控件属性进行配置。 --------------------编程问答-------------------- 我想要的重用方式(并没有想得很清楚,也有点想不清楚)是:

(1)通过在属性页上设置数据库的路径,这一套东西就可以用。
(2)对于每个不同的应用,数据库的某些表可能会增加不同的字段。相应的会需要额外的代码和控件来做这些多出来的信息的管理和显示。 --------------------编程问答-------------------- 你是说把这所有的东西,包括TreeView, ListView, Subform, SpliBar等等都打包成一个整体的控件么?

那如果重用的时候我需要对其中的TreeView, ListView, Subform, SpliBar做额外的编程控制的话,我就需要把这些控件的引用对外暴露么? --------------------编程问答-------------------- 那么只有固定的 TreeView 可以完全重用,其他部分只能作为模板使用了。 --------------------编程问答-------------------- 假设我的控件叫AAA,它有个属性叫TREE,是个treeview类型的对象变量。

那我就这么用:AAA.TREE,是这意思么?

在MSDN里有这么一句“References to ActiveX controls,should never be returned to client applications。” --------------------编程问答--------------------
引用 12 楼 tiger_zhao 的回复:
那么只有固定的 TreeView 可以完全重用,其他部分只能作为模板使用了。


你说的“模板“是指作为拷贝粘贴的“模板”么? --------------------编程问答-------------------- 以前我做树类的时候,我是做了一套互相关联的类。然后使用它们的时候,我就在我的应用里加入这一套类,然后在此基础上作针对特定应用的开发,可能有时候我会直接在其中的某些类里添加方法和属性。

这样做我很习惯。但是这样,其实就是拷贝粘贴型的代码复用了,有它的众所周知的问题。 --------------------编程问答-------------------- 继续等老鸟回复  --------------------编程问答-------------------- 具体细节没有标准样本,完全看实际需求。
可以整个界面是固定的,然后用不同的数据进行定制。
也可以提供多种通用的数据类、控件,界面进行定制。 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 15楼的话其实我没说完。

拷贝粘贴的问题就是改了一个地方,众多副本都得一一去改,一不留神可能还改错了。

有什么办法可以防止这个问题呢?据说用Components会比较好。可是具体到这个情况,我又不知道怎么把它们变成compomnents了?

另外14楼我的理解对么? --------------------编程问答-------------------- 就像炒菜该放多少盐一样,即要有长期的经验也要考虑个人喜好,没有标准。 --------------------编程问答-------------------- 我想了个好主意。

(1)我可以把其中每个控件封装成自己的usercontrol,这样我可以单独对他们做额外的编程。
(2)然后我可以另外做一个控件,用来把这几个usercontrols组织起来。因为这些usercontrols实际上共享一些相同的属性(比如数据库文件的位置),我只需要在这个虚拟的控件的属性页上设置一次就好了。这个虚拟的控件不需要可见界面。 --------------------编程问答--------------------
引用 21 楼 slowgrace 的回复:
我想了个好主意。

 (1)我可以把其中每个控件封装成自己的usercontrol,这样我可以单独对他们做额外的编程。
 (2)然后我可以另外做一个控件,用来把这几个usercontrols组织起来。因为这些usercontrols实际上共享一些相同的属性(比如数据库文件的位置),我只需要在这个虚拟的控件的属性页上设置一次就好了。这个虚拟的控件不需要可见界面。


每个控件?treeview你再次封装,tab也是?
对于你图中的例子
其实你的右边那个tab和几个textbox可以做成一个usercontrol,专门现实细节。
左边的treeview传递信息进去

usercontrol有使用便利,可多次重复利用的优点,同样它也付出了一部分的灵活性。所以说这需要对需求正确理解与预测。不建议多个usercontrol多层嵌套,嵌套太多了对于将来的软件拓展,以及移植会带来不便。

--------------------编程问答-------------------- 看来看去就是和VB6的MDI子窗体一回事 --------------------编程问答-------------------- clear_zero,你说得对。那上面的作废,我又想了个好主意:

在设计视图下用户根据自己的想法拖放各种VB自带的控件到窗体上,然后告诉我的“这堆东西”谁是谁,之后这堆东西就可以在自己内部的类里控制这些控件。当用户在运行时通过这些控件改动数据的时候,这堆东西也会得到事件通知,负责数据更新的相关业务逻辑。这样的话,这堆东西也许应该是个不带界面但是带属性页的ActiveX控件(或者是个带属性页的ActiveX dll?)。

注:这种想法里强调有属性页的目的,是为了让开发者(其实就是我自己了)不用写代码就可以告诉“那堆东西”谁是谁以及从哪里取数据。

比如我在应用里放一个这堆东西的实例AAA,一通设置后,运行程序,它就可以从指定的表里取出数据并展示还支持增删改。再比如,假如我希望用到AAA里用来控制树控件的成员对象变量TTT的方法MMM,那我就在程序里写Call AAA.TTT.MMM。

--------------------编程问答-------------------- UP --------------------编程问答-------------------- UP --------------------编程问答-------------------- UP --------------------编程问答-------------------- 顶。 --------------------编程问答-------------------- 关于子窗体,有没什么办法把ACCESS里的子窗体/子报表控件拿到VB里用呢?

找了半天,没看出来这个控件对应是哪个OCX?貌似对应的是一个叫MSACC.OLB的文件?这个能引入到VB中么? --------------------编程问答-------------------- 没留意过这方面的资料。
不过各自的运行环境、容器不一样,估计是不能用的。需要复制代码,照样做一个。 --------------------编程问答-------------------- 我,再小声地咬文嚼字一哈,因为实在是很希望

你说的“复制代码”,是说到什么地方拷贝代码么?是到什么地方拷贝呢? --------------------编程问答--------------------
引用 31 楼 slowgrace 的回复:
我,再小声地咬文嚼字一哈,因为实在是很希望

你说的“复制代码”,是说到什么地方拷贝代码么?是到什么地方拷贝呢?

老鸟说的复制可能是看一个示例的代码,照着示例思路写 --------------------编程问答-------------------- 不大可能8?这是它内部的控件,哪里会有示例?

就像TreeView控件,你见过实现它的示例么? --------------------编程问答-------------------- 还以为你将自己做好的子窗体、控件到 VB6 中用。
直接用原始的子窗体、控件设计器更加不可能了,设计器严重依赖于 IDE。 --------------------编程问答-------------------- 您发的图里并非子窗体,这种样式可以用一个容器控件,如PictureBox
一个框架控件,Frame,和滚动条,HScrollBar、VScrollBar组和添加代码实现,
想封装可以把他们做到用户自定义控件中……

VB中的子窗体一般使用MDI窗体实现,
也可以使用普通窗体,并用SetParent函数(API)关联两个窗体。

不过无论封装办法,还是这种多重窗体或者窗体内控件容器VB6都不如.NET,
俺觉得VB6更适合开发对话框数据软件……
补充:VB ,  非技术类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,