`
izuoyan
  • 浏览: 8937151 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在VB.NET中怎么实现多窗体同步(1)

阅读更多

假定我有两个窗体,每个窗体都有两个 textbox 控件:txt1stData 和 txt2ndData。我怎样才能保持这两个窗体中的控件同步呢?对于我们讨论的问题来说,有两个或十个窗体都不重要,问题是相同的。

第一个办法相对简单。事实上,它甚至比我们直接使用委托更为简单,我想委托有时会给人用牛刀杀鸡的感觉。首先,我建立一个类它包含我希望与应用程序 中的所有窗体共享的属性(参见 Figure 1)。例如,MyData 和 MoreData 拥有每个窗体都能显示的数据。我将很快回到这个类来。

第二,正如我早先提到的我用相同的控件(txt1stData 和 txt2ndData)建立了两个窗体。你可以参考 Figure 2 的布局。两个窗体都有完全相同的数据,并且我将很快解释为什么。

498)this.style.width=498;'' onmousewheel = ''javascript:return big(this)'' height=165 alt=在VB.NET中怎么实现多窗体同步 src="/files/uploadimg/20061204/1635410.jpg" width=305 border=0 twffan="done">

下面,我建立一个名为 modGeneral 的模块并加入下面一行代码:

Friend DataStuff As DataClass

这一行代码为我的新类 DataClass 创建了一个友元变量,使你可以完全访问程序集,对这个简单例子来说,也就是指完整的应用程序。然后我添加了下面的代码到 Form1 的 Load 事件:

DataStuff = New DataClass

Me.txt1stData.DataBindings.Add("Text", DataStuff, "MyData")

Me.txt2ndData.DataBindings.Add("Text", DataStuff, "MoreData")

第一行建立一个 DataClass 新实例。下面两行代码将数据绑定到 textbox 控件。对这个窗体而言,就这么些操作!

现在,你怎样让它们与 Form2 和其它窗体上的数据同步呢?将下面两行加入到 Form 2 的窗体load 事件中去:

Me.txt1stData.DataBindings.Add("Text",DataStuff, "MyData")

Me.txt2ndData.DataBindings.Add("Text",DataStuff, "Moredata")

这个方法容易确保所有窗体上的几乎任何类型的数据处于同步状态。你可以简单地将控件绑定到某个类的相同实例上,这就行了。

现在来看另一个方法。我创建了一个名为 frmBase 的新窗体。这时我在上面放一个 textbox (txtNextData)和 label。我想 让应用程序的每个窗体都共享这个 textbox 和 label,并且我希望它们互相之间保持同步,于是我重建这个工程。通过从新的 frmBase 中的继承 ,我创建了 Form1 和Form2,因此它们继承了所有新的控件。但是我怎样能保持这些控件同步呢?这时必须写一点代码去达到此效果,这些代码在单个的类中,通过简单地调用一 个函数而被复用。

Figure 3 中的代码展示了这个称为 modGeneral 模块。它的第一个任务是定义两个变量:MyForms 和 localNextData。MyForms 是一个 集合,它将包含我想要同步的窗体列表。localNextData变量将储存所有我想要在窗体里显示的数据。注意这些变量可以驻留于某个类中而不是某个模 块里。

AddForm 过程来自 modGeneral,带一个窗体实例参数,并将其加入 MyForms 集合中。我将在UpdateControlsNextData 过程中使用这个 集合以决定哪些窗体要更新。AddForm 也调用UpdateControlsNextData 来确保一个新窗体是用正确的数据更新的。

modGeneral 中的其它代码是 NextData 属性。这些属性的 set 存取器更新 localNextData 并也调用 UpdateControlsNextData 去同步所有窗体。这时所有我需要做的是 在想要改变它时设置 NextData,通过调用 UpdateControlsNextData,所有窗体将被更新。第三个方法是定制链接,它是第二个方法的精华版。我创建它以获得多一些窗体控件处理的 灵活性。例如,我只想跟踪和处理某些窗体,这些窗体包含必须同步的控件。这个方法 还可以让我自己定义拟同步的控件,并且只处理这些控件的窗体。

我为这个办法添加了另一个模块 (modGeneralv2),如 Figure 4 所示。该模块包括一个集合(MyFormsToUpdate),其中包含所有我想要同步的窗体。这个模块 还有一个新的数组 (ControlsToUpdate),它提供一个我要同步的控件列表。该数组的定义如下:

Private ControlsToUpdate() As String = {"txtCustomer", "txtAddress", "txtName"}

这个模块里有一个新的替代 AddForm 的改良版本,叫做 AddFormToUpdate。该方法工作方式与AddForm 类似,但现在它只添加拥有一个或多 个 ControlsToUpdate 数组中控件的窗体,因此只有那些含有特定控件的窗体在更新集合中。它使我可以从每个窗体中调用该函数。如果我决定以后添加某个特定的控件,它将会被自动添 加到窗体列表。我只需对窗体代码做细小的改动便可以实现。


分享到:
评论

相关推荐

    VB.Net-C#多线程Thread-代理委托delegate编程

    VB.NET多线程——高级同步技术.txt VB.NET多线程——线程池.txt Visual C#多线程参数传递浅析.txt WebBrowser控件-弹出新窗体和关闭窗口.txt WebBrowser控件的简单应用2.txt 多线程为基于.NET的应用程序实现响应迅速...

    VB.net小例程,字符串和ASCII对照小程序,字体大小可以根据对话框大小自动调整

    最近同事开发中经常遇到使用字符串和ASCII对照,而且需要随时调整对话框大小,字体也需要跟着改变,遂向我提问,正好闲来无事,顺手用VB给做了个小程序,很典型的VB开发,对于小白来说正好可以学习一下创建VB工程,...

    VB.net 同步绑定TextBox (实现无事件自动关联Grid 源码)

    CurrencyManager 同步绑定TextBox 跨窗体绑定TextBox SQL

    asp.net知识库

    实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    1.3.1 在代码中设置窗体属性 29 1.3.2 visual studio的其他组件 37 1.4 增强示例应用程序的功能 37 1.4.1 定制代码 39 1.4.2 构建应用程序 43 1.4.3 重用第一个windows窗体 50 1.5 visual studio 2010中...

    一款支持歌词同步的MP3播放器(VB源代码)

    一款支持歌词同步的MP3播放器,完全的VB源代码. 注:这是我从网上下载来修改的 1. 使用 CommonDialog 控件并支持多选 '- 2. LRC 控件 由佳诚工作室开发 提供 在此 不提供 控件源码 有兴趣的朋友可以和我 交流 '- 3. ...

    PictureBox控件作播放时间进度条演示

    1、PictureBox控件作播放时间进度条演示,不会闪烁,并且...2、在窗体Form1中放2个命令按钮Command1、Command2,1个滑杆控件Slider1,1个图片框控件Picture1,Picture1和Slider1的宽度可以不一样,1个定时器控件Timer1

    Visual.C#.编程精彩百例

    实例72 在.NET程序设计中使用ATL 实例73 浏览Internet文件 实例74 在C#应用程序中打开浏览器 实例75 显示Internet文件信息 实例76 Puzzle游戏 实例77 MDI窗体菜单设计(1) 实例78 MDI窗体菜单设计(2) 实例...

    Windows 窗体客户端-异步 XML Web services 示例

    如何通过使用 .NET 框架的内置异步支持,从 Visual Basic .NET Windows 窗体客户端应用程序调用 XML Web services。该应用程序 XML Web services 采用一个输入参数——在返回到客户端之前延迟的毫秒数——并将一个...

    net学习笔记及其他代码应用

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    Net WinForm开发一键国际生成(SGHNetMultiLang)

    提供对:C#, VB.NET,WinForm,库项目支持. 提供对:NET4.0-4.8.1,Net.Core3/5/6/7 支持. 提供支持69语言支持与内容识别,并支持自定识别格式. 提供支持对Resx资源文件,翻译内容,扫描内容自定过滤支持. 提供支持对Resx...

    Access 2007 VBA宝典 1/4

    完整清晰版 PDF ,有目录。共 120MB,分为四个分卷 ... 无论是否打算以Access报表、数据透视图或数据透视表,或者Word文档或Excel工作表来表现数据,数据都可存储在Access表中,并在Access窗体中输入和编辑数据。

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    《Visual.C#.编程精彩百例》配套光盘part1

    实例46 防止多线程应用程序死锁 实例47 文件同步操作与应用 实例48 在COM程序设计中使用.NET组件 实例49 文件异步操作与多处理器系统 实例50 获取网络主机IP地址 实例51 C#对话信息框的应用...

    vc++ 应用源码包_1

    主要的实现在CListReport类中。 CListCtrlTest 演示了重载CListCtrl后的使用方法。 CListItem Drawing 演示了其它控件(全部)阙套到List中并自绘等,学习自绘以及阙套CListCtrl 控件的好实例。 ColorStatic 自绘...

    强化DataGrid控件功能代码

    Windows窗体DataGrid控件是NET 1.0/1.1推出的控件,在VS2005中亦可以继续使用,虽然它在功效方面不如NET 2.0新增的控件DataGridView,但它仍有用武之处,特别是对于已完成的项目中使用了该组件时,没有必要更换它,...

    《Visual.C#.编程精彩百例》配套光盘.part2

    实例46 防止多线程应用程序死锁 实例47 文件同步操作与应用 实例48 在COM程序设计中使用.NET组件 实例49 文件异步操作与多处理器系统 实例50 获取网络主机IP地址 实例51 C#对话信息框的应用...

    vc++ 应用源码包_2

    主要的实现在CListReport类中。 CListCtrlTest 演示了重载CListCtrl后的使用方法。 CListItem Drawing 演示了其它控件(全部)阙套到List中并自绘等,学习自绘以及阙套CListCtrl 控件的好实例。 ColorStatic 自绘...

Global site tag (gtag.js) - Google Analytics