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