新的要求
現(xiàn)在假設(shè)有物理表tChange與tInfo表是一關(guān)聯(lián)表,通過關(guān)鍵字段fID關(guān)聯(lián),既表tChange的字段fID的數(shù)據(jù)是通過tInfo表提供,其它來源于用戶的輸入,要生成tChange表數(shù)據(jù)處理的窗體。要實現(xiàn)這些功能,我們同樣通過窗體的繼承來完成(有物理表tSub也如此)。
.先定義窗體模板frmModul2,此frmModul2繼承frmModul, 即:Public Class frmModul2: Inherits Asset.frmModel。 在frmModul2中加入列表盒控制ListBox1和其它控制,布置好后如下圖:
.在frmModul2的Load事件中填充ListBox的數(shù)據(jù)并隱藏不必要的控件。
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
.當(dāng)單擊ListBox1時選擇當(dāng)前數(shù)據(jù)并填充至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
生成的窗體如下圖:
依照前面設(shè)置所操作的表tChange和其它,不必寫其它代碼。
Public Sub New() … gCls.UpdateTable = "tChange" End Sub
同樣可生成操作表tSub的窗體frmSub。
總結(jié)
通過以上面事例的介紹,可以生成若干同類似的窗體。不論操作多少表,都可通過窗體繼承得到,物理表的操作一次性完成,不必在每個窗體中寫代碼,所完成的功能及界面布局全在模板窗體中完成。這樣極大地降低了編寫代碼的工作量,同時為設(shè)置窗體整體外觀提供以方便,提高了開發(fā)效率,也降低了軟件的測試和維護的工作量。繼承是面向?qū)ο蟮拈_發(fā)語言的一個重要組成部分,在程序設(shè)計中充分的利用繼承關(guān)系,可以最大范圍的提高程序的可利用性,使得用最少的代碼開發(fā)比較大的應(yīng)用程序。
|