日期:2012-07-13  浏览次数:20666 次

新的要求

  现在假设有物理表tChange与tInfo表是一关联表,通过关键字段fID关联,既表tChange的字段fID的数据是通过tInfo表提供,其它来源于用户的输入,要生成tChange表数据处理的窗体。要实现这些功能,我们同样通过窗体的继承来完成(有物理表tSub也如此)。

  .先定义窗体模板frmModul2,此frmModul2继承frmModul, 即:Public Class frmModul2: Inherits Asset.frmModel。 在frmModul2中加入列表盒控制ListBox1和其它控制,布置好后如下图:



  .在frmModul2的Load事件中填充ListBox的数据并隐藏不必要的控件。

Private Sub frmModul2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles  MyBase.Load
 FillListBox(Me.ListBox1)
 Me.tlbAdd.Visible = False
End SubPublic

Sub FillListBox(ByVal ListBox As ListBox)
 Dim StrSQL As String
 StrSQL = "select Distinct fID || ' ' || fName as a FROM tInfo "
 Dim dr As OleDb.OleDbDataReader

 dr = DB.SQLDataReader(StrSQL)
 While dr.Read
  ListBox.Items.Add(dr.Item("a"))
 End While
 dr.Close()
End Sub

.当单击ListBox1时选择当前数据并填充至txt1, txt3中
Public Overridable Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
 Dim i, txt
 i = ListBox1.SelectedIndex
 txt = ListBox1.Items(i)
 txt1.Text = txt.Substring(0, 15)
 txt3.Text = txt.Substring(16, Len(txt) - 16).trim
 txtID.Text = gCls.GetMaxSystemID + 1
 gCls.FillGrid(DataGrid1)
 gIsUpdate = False
End Sub

  好了,我们的窗体模板又做好了,下面我们通过窗体模板frmModul2生成继承窗体frmChange,即:

Public Class frmChange:Inherits Asset.frmModul2

  生成的窗体如下图:



  依照前面设置所操作的表tChange和其它,不必写其它代码。

Public Sub New()

gCls.UpdateTable = "tChange"
End Sub

  同样可生成操作表tSub的窗体frmSub。




  总结

  通过以上面事例的介绍,可以生成若干同类似的窗体。不论操作多少表,都可通过窗体继承得到,物理表的操作一次性完成,不必在每个窗体中写代码,所完成的功能及界面布局全在模板窗体中完成。这样极大地降低了编写代码的工作量,同时为设置窗体整体外观提供以方便,提高了开发效率,也降低了软件的测试和维护的工作量。继承是面向对象的开发语言的一个重要组成部分,在程序设计中充分的利用继承关系,可以最大范围的提高程序的可利用性,使得用最少的代码开发比较大的应用程序。