现在尝试做一个通用的主窗体.所谓通用,按我的理解,是尽可能的把常用功能实现在一个类上,应用时仅考虑实际需求.
因为是尝试,所以这部分代码我就不贴上来了,现在只说表现.
主窗体一般的表现有两种,一是MDI,一是象IDE那种形式.我就将这两种集合在一起.
使用时,简单的代码就可以实现如下的效果.
代码:
Public Class MainForm
Inherits LzmTW.uSystem.uWindows.uForms.uMainForm.MainForm
'实现特定菜单加载
Protected Overrides Sub MenuManagerRead()
If Not IO.File.Exists(Me.MenuManager.FileName) Then
Me.MenuManager.GetDefault() '默认菜单
Me.MenuManager.SaveFile()
Else
Me.MenuManager.ReadFile()
End If
End Sub
End Class
Inherits LzmTW.uSystem.uWindows.uForms.uMainForm.MainForm
'实现特定菜单加载
Protected Overrides Sub MenuManagerRead()
If Not IO.File.Exists(Me.MenuManager.FileName) Then
Me.MenuManager.GetDefault() '默认菜单
Me.MenuManager.SaveFile()
Else
Me.MenuManager.ReadFile()
End If
End Sub
End Class
效果:
切换到MDI模式:
或者用代码指定为MDI模式:
Private Shadows Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim mToolStripMenuItem As ToolStripMenuItem = CType(Me.MenuManager.FindToolStripItem("HideWorkspace"), ToolStripMenuItem)
If mToolStripMenuItem IsNot Nothing Then
mToolStripMenuItem.PerformClick()
mToolStripMenuItem.Enabled = False
End If
End Sub
Dim mToolStripMenuItem As ToolStripMenuItem = CType(Me.MenuManager.FindToolStripItem("HideWorkspace"), ToolStripMenuItem)
If mToolStripMenuItem IsNot Nothing Then
mToolStripMenuItem.PerformClick()
mToolStripMenuItem.Enabled = False
End If
End Sub
效果:
做一个简单的功能实现:
Friend Class OpenTxtFileService
Private gMainForm As LzmTW.uSystem.uWindows.uForms.uMainForm.MainForm
Sub New()
gMainForm = CType(My.Application.ApplicationContext.MainForm, LzmTW.uSystem.uWindows.uForms.uMainForm.MainForm)
Initialize()
End Sub
Private Sub Initialize()
With gMainForm.WorkSpace.AddControlTo(LzmTW.uSystem.uWindows.uForms.MainFormSplitContainer.Panels.Center, New RichTextBox)
.Name = "Rich"
.Dock = DockStyle.Fill
End With
'绑定主窗体[打开]菜单项单击事件
gMainForm.MenuManager.AddActionHandler("Open", "Click", "OnOpenClick", Me)
'单击事件也可以这样绑定
'gMainForm.MenuManager.AddClickHandler("Open", AddressOf OnOpenClick)
End Sub
Private Sub OnOpenClick(ByVal sender As Object, ByVal e As EventArgs)
Dim f As New OpenFileDialog
Using f
f.Filter = "txt|*.txt"
f.Multiselect = False
If f.ShowDialog = DialogResult.OK Then
Dim mRich As RichTextBox = CType(gMainForm.WorkSpace.FindControl(LzmTW.uSystem.uWindows.uForms.MainFormSplitContainer.Panels.Center, "Rich"), RichTextBox)
mRich.LoadFile(IO.File.Open(f.FileName, IO.FileMode.Open), RichTextBoxStreamType.PlainText)
gMainForm.SendMessage(f.FileName)
End If
End Using
End Sub
End Class
主窗体Load代码改为:
Private Shadows Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim mOpenTxtFileService As New OpenTxtFileService
End Sub
Dim mOpenTxtFileService As New OpenTxtFileService
End Sub
效果:
主窗体本身已含插件功能,所以可以通过插件实现功能.