在程序设计中,本人遇到这样一个问题,为了显示界面的需要把各个功能块写成"用户控件" ,并在splitcontainer控件的panel2中显示,显示的代码如下:
If
Me
.kj.Panel2.Controls.Count
=
0
Then
Dim show_part As gl_byb ’glby 就是要显示的用户控件
show_part = New gl_byb ‘实例化控件
Me .kj.Panel2.Controls.Add(show_part) ’添加到Panel2中
show_part.Dock = DockStyle.Fill
show_part.Visible = True
Else
MsgBox ( " 请先关闭当前窗口 " , MsgBoxStyle.Critical, " 提 示 " )
End If
Dim show_part As gl_byb ’glby 就是要显示的用户控件
show_part = New gl_byb ‘实例化控件
Me .kj.Panel2.Controls.Add(show_part) ’添加到Panel2中
show_part.Dock = DockStyle.Fill
show_part.Visible = True
Else
MsgBox ( " 请先关闭当前窗口 " , MsgBoxStyle.Critical, " 提 示 " )
End If
问题来了:总共有几十个功能模块要显示,难道要把上面的代码重复几十遍?!
从上面代码中我们可以看到在反复是红用中真正需要变化的只有“gl_byb”这个用户控件类,怎样才能简化代码呢?
实际上我们可以使用泛型程序来达到目的。首先定义一个同样的显示模块Display,如下:
Private
Sub Display()
(Of T As {New, System.Windows.Forms.Control})()
If Me.kj.Panel2.Controls.Count = 0 Then
Dim show_part As T
show_part = New T
Me.kj.Panel2.Controls.Add(show_part)
show_part.Dock = DockStyle.Fill
show_part.Visible = True
Else
MsgBox("请先关闭当前窗口", MsgBoxStyle.Critical, "提 示")
End If
End Sub
Dim show_part As T
show_part = New T
Me.kj.Panel2.Controls.Add(show_part)
show_part.Dock = DockStyle.Fill
show_part.Visible = True
Else
MsgBox("请先关闭当前窗口", MsgBoxStyle.Critical, "提 示")
End If
End Sub
代码中“Private Sub Display()(Of T As {New, System.Windows.Forms.Control})() ” 的含义是:
Of T 表示传递一个类型参数;
As {New, System.Windows.Forms.Control} 表示 对这个泛型程序进行约束,条件有两条:1.可以使用New ** 的无参数的方式实例化类;2.这个类型是基于System.Windows.Forms.Control类的
这样我们就定义了一个可以反复使用的显示代码,在具体的按钮事件中我们只需要调用这个泛型程序就可以了!调用的代码如下:
Display(
Of
gl_byb)() ‘传递的类型是“gl_byb”
通过这个例子我们看到,如果我们需要传递类型的时候可以使用泛型程序来完成!