MDI的使用

 mdi可能是大点的WINFORM系统都要用的。废话不多说(我也不知道要说什么)直接进入正题。我用四个窗体来实现这个小功能,一个登陆窗体,一个主窗体,两个子窗体。

首先从最开始的Main()开始,将你的主窗体设置为最先运行的窗体

 Application.Run( new  Main());

接下来创建登陆系统,登陆成功进入主界面,退出则腿掉整个系统。如何验证用户名和密码是否正确,以及窗体的布局我就不说了。要想使每次启动时,登陆窗体都在中间位置只要在属性中设置startPosition为CenterScreen就可以了。好了,通常都要在这个窗体中设置个全局变量来标志窗体的状态。

  public   static   int  blCanLogin  =   0 ;

当确定用户输入正确的时候把blCanLogin = 2,然后关闭登陆窗体。退出的时候设置为blCanLogin = 1,然后关闭登陆窗体。为什么这样做,等会介绍。

现在来说主窗体。首先在属性中ISMdiContainer为true。主窗体的FORM_LOAD中这样设置。意思是除了登陆正确否则全部窗体关闭。

    private   void  Main_Load( object  sender, EventArgs e)
        {
            Login login 
=   new  Login();
            login.ShowDialog();
            
if  (Login.blCanLogin  !=   2 ) {  this .Close(); }
        }

通常主窗体启动子窗体都是用menuStrip来设置的,在里面加上你需要的菜单,我需要的就是“窗体1”和“窗体2”就可以了。在窗体1和窗体2中设置如下代码,即设置Mian为他们的主窗体。

   public  Form1(Main parent)
        {
            InitializeComponent();
            
this .MdiParent  =  parent;
       }

到这里其实大部分的工作已经做完了,但其实在运行时回出现很多问题。如:同一个窗体会打开很多个,点击菜单窗体不能放到最上面等等。所以要判断子窗体是否已经打开的操作。我仅已窗体2为例:

我写了个方法来判断窗体是否已经打开:如果窗体存在了就  F1.Activate();把窗体放到最上面

  private   bool  check( string  form1)
        {
            
foreach  (Form F1  in   this .MdiChildren)
            {
                
if  (F1.Name  ==  form1)
                {
                    F1.Activate();
                    
return   true ;
                }
            }
            
return   false ;
        }

对窗体2来说:当窗体没打开就把该窗体家到子窗体数组中,并打开。

   private   void  窗体2ToolStripMenuItem_Click( object  sender, EventArgs e)
        {
            
bool  bo  =  check( " Form2 " );
            
if  (bo  ==   false )
            {
                Form2 form 
=   new  Form2( this );
                form.MdiParent 
=   this ;
                form.Show();
            }  
            
        }

这样就可以了,上面的问题在这些代码中也都解决了。满意吧!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值