工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VB.net > 正文
VB.NET中多窗体同步的解决方案
[文章信息]
作者:小刀人编译
时间:2004-06-03
出处:论坛
责任编辑:方舟
[文章导读]
我用单个窗体的多实例构建一个 Windows 窗体应用程序
advertisement
热点推荐
· 在VB6中用命令行为模式控制GUI动作
· Excel图表向导详解
· 浅析各种计算机病毒应对方法
· 2月16日软件精选 春节文章精彩回顾
· 轻松玩转Excel数据图表
[正文]

上一页  1 2  

  第三个方法是定制链接,它是第二个方法的精华版。我创建它以获得多一些窗体控件处理的灵活性。例如,我只想跟踪和处理某些窗体,这些窗体包含必须同步的控件。这个方法 还可以让我自己定义拟同步的控件,并且只处理这些控件的窗体。

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

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

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

  这个模块还包含 UpdateControlsOnAllForms 过程,它执行更新。代替上一个方法中使用的一个应用程序级变量,我现在使用主窗体的概念。因此我可以将那个窗体的值拷贝到集合中的所有其它窗体。UpdateControlsOnAllForms 其实就是一组简单的 For...Nexts 循环遍历某个窗体的所有控件,找到需要更新的控体,并更新它们。

  为了在我的窗体中实现这一功能,我在窗体的 Load 事件中加入了这一行代码: AddFormToUpdate(Me)

  另外一种可选的方法,我可以将它添加到构造函数。这一行代码将把当前窗体实例添加到集合进行更新。

  现在让我们考察单个事件过程:

Private Sub txt_Leave(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles txtAddress.Leave, _
txtCustomer.Leave, txtName.Leave
UpdateControlsOnAllForms(Me)
End Sub

  这段代码将我想要同步的所有三个控件 (txtAddress、txtCustomer 和 txtName)的 Leave 事件捆绑到一个事件句柄上。这时我可以添加一行代码 来调用 UpdateControlsOnAllForms。Me 被传递到该过程调用,从而导致其它窗体与该窗体同步。

  现在我有三个版本的代码,它们都可以同步窗体中控件,因此我可以进行选择。我可能已经使用了自定义事件,在 DataClass 中定义某个事件并让每个窗体都预订它。 然后当这个事件触发时,这些窗体可以从每个事件句柄中获取新的数据并设置适当的控件。但是这样做所需的代码量一点也不会比第一种方法中将控件绑定到类来得少。我可以构建单个实现更新的过程,并将该过程放到某个模块中。我需要向该过程传递窗体实例来实现更新。我可以用类中的某个事件句柄触发这个过程。此过程看起来就像这样:

Sub UpdateControls(ByVal ThisForm As frmBase)
With ThisForm
.txtNextData.Text = localNextData
End With
End Sub

  ThisForm 参数被定义为 frmBase 类型,以便它可以访问 IntelliSense 并获得窗体的自定义属性。简单地将它写成 Form 将无法显示 frmBase 中的属性及其派生窗体。

  另一选择是使用委托。当然,委托可以让我将委托调用重定向到每个窗体的方法上。如果我使用多播机制,那么我可以让每个窗体都处理该事件并更新相应的控件。用委托建立这样的功能听起来确实简单,但 对我来说它更麻烦且没有实践价值。此外,与第三个方法中的 For...Next 循环嵌套相比,这个代码并不难理解。毕竟,一个应用程序花费最大的部分仍然是它的维护。



上一页  1 2  

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • VB.NET时间日期数据处理及技巧
  • 实战Visual Basic.Net对话框
  • 深入浅出VB.NET提示对话框
  • VB.Net编程入门之Hello World
  • DataSet中的数据并发性异常
  • 国信办督战八大行业灾难备份 将出台国家标准
  • 中国IT企业走进欧盟 搭第六框架计划直通车
  • 美邦银行用户注意 警惕新型“钓鱼”邮件
  • 微软三年时间磨出新IE 具有更强大安全性能
  • 高清碟机标准打内战 HDV将状告EVD恶性竞争
  • 正版网上银行为何不安全 客户泄密银行无责任
  • 惠普铁娘子悲壮退场 未能成功扮演拯救者
  • 网上乱用人民币图样是违规行为 最高罚3万
  • Advertisement