您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:15 来源:vckbase.com

本文章共3584字,分3页,当前第1页,快速翻页:
 

Advanced Basics 专栏...

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


原著:Ken Spencer

翻译:小刀人

逆风编程精品



原文出处: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 来确保一个新窗体是用正确的数据更新的。
 
本文章更多内容1 - 2 - 3 - 下一页>>
相关文章

可以替代系统记事本的程序
论程序设计方法
图形显示特技算法
SQL Server 索引结构及其使用(三)
简单实用的Xml解析类
一个实用的CToolBar扩展类CToolBarEx
定时显示远程计算机的桌面
《系统飞狐》系列软件中的“系统监视器”开
自绘按钮的实现
WMI 的一个实现
使用socket套接字时的两点经验
如何使用BHO定制你的Internet Explorer浏览
DLL初学者指南(非MFC)
VC中基于 Windows 的精确定时
模拟 Windows 下 CPU 占用率的控件及其实现
自动隐藏停泊窗体实现
Buffer Overruns,portability和其它...
在你的程序中如何使用CButtonST类
QQ2006 界面编程之鸡蛋里挑骨头
用 Web 服务进行二进制序列化和 BinaryForm

相关评论


本文章所属分类:首页 VC++

  热门关键字: