WinForm设计之主窗体

本文探讨了如何设计一个通用的WinForm主窗体,结合MDI(多文档界面)和IDE的特性。通过简单代码实现模式切换,提供了一种将这两种形式集于一体的方案,并介绍了主窗体加载时的代码调整,以及利用插件来扩展功能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Author: 水如烟  

参考应用类代码辅助类代码

现在尝试做一个通用的主窗体.所谓通用,按我的理解,是尽可能的把常用功能实现在一个类上,应用时仅考虑实际需求.

因为是尝试,所以这部分代码我就不贴上来了,现在只说表现.

主窗体一般的表现有两种,一是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

效果:

 切换到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

效果:

做一个简单的功能实现:

 


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

效果:

主窗体本身已含插件功能,所以可以通过插件实现功能.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值