从MainForm刷新当前UserControl的土办法

需求:MainForm固定区域需显示不同子类的UserControl,每次显示新的UserConrol前将当前UserControl先Dispose,我的做法是:

Public CurrentControl As UserControl

...

Dim NewUserControl As New Project1.UserControlA
NewUserControl.Dock = DockStyle.Fill
CurrentControl.Dispose()
Me.SplitContainer1.Panel2.Controls.Add(NewUserControl)
CurrentControl = NewUserControl


其中Project1.UserControlA为具体子类UserControl。

问题:现在需要在MainForm中直接控制当前显示的用户子类UserControl的用户自定义操作,例如从数据库重新读入数据。最容易想到的办法就是多态操作,但UserControl属于系统类,我不知道怎样增加自定义方法也不想这样增加,而用户子类UserControl又是系统直接从UserControl派生的子类,因此中间插入一个承上启下的自定义类的方案貌似也不太轻松。

解决办法:暂时利用UserControl现有的某个不常用的可由用户代码触发但是又不常出现的事件代替这种操作,例如VisibleChanged。代码如下:

In MainForm Class:
        CurrentControl.Visible = False
        CurrentControl.Visible = True

In UserControlA Class:
    Private Sub UserControlA_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged
        Static Dim FirstRun As Boolean = True
        If Not FirstRun And Me.Visible = True Then
            'Update operation
        End If
        FirstRun = False
    End Sub


办法比较笨拙,如果您有更好的办法请不吝指出。




posted on 2006-07-27 15:48  KADreams  阅读(849)  评论(0)    收藏  举报