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

happy孟咔咔

happy孟咔咔

2016-01-29 11:56

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

Advanced Basics 专栏...

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


原著:Ken Spencer

翻译:小刀人

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



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

猜你喜欢

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

C语言教程 C语言函数
Visual Basic .NET 中多 Windows 窗体的同步

Visual Basic .NET中操作MsAgent

vb
Visual Basic .NET中操作MsAgent

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Visual Basic.NET中访问数据的方法

vb
Visual Basic.NET中访问数据的方法

在 Visual Basic .NET 中实现后台进程(三)

电脑网络
在 Visual Basic .NET 中实现后台进程(三)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

从 Visual Basic 6.0 到 Visual Basic.NET 的转换(4)

vb
从 Visual Basic 6.0 到 Visual Basic.NET 的转换(4)

从 Visual Basic 6.0 到 Visual Basic.NET 的转换(5)

vb
从 Visual Basic 6.0 到 Visual Basic.NET 的转换(5)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

三维支架建模--教程(原创)

三维支架建模--教程(原创)

Windows SDK笔记(四):模式对话框

Windows SDK笔记(四):模式对话框
下拉加载更多内容 ↓