Visual Basic .NET 中多 Windows 窗体的同步

2016-01-29 11:56 5 1 收藏

Visual Basic .NET 中多 Windows 窗体的同步,Visual Basic .NET 中多 Windows 窗体的同步

【 tulaoshi.com - C语言心得技巧 】

Advanced Basics 专栏...

Visual Basic .NET中多 Windows 窗体的同步


原著:Ken Spencer

翻译:小刀人

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)



原文出处:MSDN Magazine April 2004 (Advance Basics)

原代码下载:AdvancedBasics0404.exe(135KB)

我用单个窗体的多实例构建一个 Windows 窗体应用程序。我想把它写成 这样一个程序:对该窗体任何一个实例的操作都会在所有其它实例上反映出来。我该怎么做?

这是一个有趣的问题。我保证某些聪明的编程好手会建议我使用委托。在这种事情发生之前,让我们 先探究一下这个问题的几种解决方案。
  假定我有两个窗体,每个窗体都有两个 textbox 控件:txt1stData 和 txt2ndData。我怎样才能保持这两个窗体中的控件同步呢?对于我们讨论的问题来说,有两个或十个窗体都不重要,问题是相同的。
  第一个办法相对简单。事实上,它甚至比我们直接使用委托更为简单,我想委托有时会给人用牛刀杀鸡的感觉。首先,我建立一个类它包含我希望与应用程序中的所有窗体共享的属性(参见 Figure 1)。例如,MyData 和 MoreData 拥有每个窗体都能显示的数据。我将很快回到这个类来。
  第二,正如我早先提到的我用相同的控件(txt1stData 和 txt2ndData)建立了两个窗体。你可以参考 Figure 2 的布局。两个窗体都有完全相同的数据,并且我将很快解释为什么。


Figure 2 窗体布局

下面,我建立一个名为 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,所有窗体将被更新。
  第三个方法是定制链接,它是第二个方法的精华版。我创建它以获得多一些窗体控件处理的灵活性。例如,我只想跟踪和处理某些窗体,这些窗体包含必须同步的控件。这个方法 还可以让我自己

来源:https://www.tulaoshi.com/n/20160129/1483932.html

延伸阅读
标签: vb
升级 向导 过程的 ParamArray 参数标记有升级警告。例如,以下代码: Function MyFunction(ParamArray p() As Variant) ... End Function 升级后将变为: UPGRADE_WARNING: ParamArray p was changed from ByRef to ByVal Function MyFunction(ByVal ParamArray p() As Object) ... End Function 声明中的...
标签: vb
本文的目的是学习如何把实际的编程问题概括为五个简单的步骤,以及在设计应用程序时如何以这五个步骤作为出发点。 内容: · 算法 · 五个编程步骤 · 横向改进 · UML · UML类图表 在过去的很多年里,出现过很多的正式的程序设计方法学。在方法学中有些相对复杂,也有些相当简单。但是所有的方法...
标签: vb
引言 以前版本的Visual Basic虽然号称自己是一种OOP(面向对象)编程语言,但却不是一个地地道道的OOP编程语言,最多只是半个面向对象的编程语言。但Visual Basic.NET已经是一种完全的面向对象的编程语言。他支持面向对象的所有基本特征:继承、多态和重载。这使得以前在Visual Basic中很难或根本实现不了的问题,在Visual Basi...
标签: vb
图 1. .NET Framework由.NET运行时和类库组成 运行时负责管理代码,在执行时向它提供服务,这与Visual Basic 6.0运行时的作用类似。.NET程序设计语言-包括Visual Basic .NET、Microsoft Visual C#、C++管理的扩展,以及多种来自不同开发商的程序设计语言-通过一组公共的统一类来利用各种服务和特性。 .NET统一类提供了创建应用程序...
本章的内容包括如何安装 Visual Basic,添加或删除 Visual Basic 部件,Visual Basic 的学习资料及如何得到更多的帮助。 目录 欢迎使用 Visual Basic 安装 Visual Basic 实际工作中的助手 欢迎使用 Visual Basic 欢迎使用 Microsoft Visual Basic,它提供了开发 Microsoft Windows(R) 应用程序最迅速、最简...

经验教程

881

收藏

34

精华推荐

Visual Basic 编码

Visual Basic 编码

文艺团海宝件

Visual Basic 概念

Visual Basic 概念

bat12138

安装 Visual Basic

安装 Visual Basic

她们叫我蔡货

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部