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