程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 在MDI窗體中將最小化的子窗體放在主窗體的狀態欄上

在MDI窗體中將最小化的子窗體放在主窗體的狀態欄上

編輯:.NET實例教程

前幾天在論壇上,看到有人問“在MDI窗體中,如何把最小化的子窗體放在主窗體的狀態欄上 ”。當時有點解決的思路,於是就嘗試去實現。

主要的思路就是,在父窗體能處理子窗體的最小化事件。

1)定義一個子窗體的基類,自定義事件。



    public class ChildFormBase : Form
    ...{
        public delegate void FormMinSize(object sender, EventArgs e);
        public event FormMinSize OnFormMinSize;   

        public ChildFormBase()
        ...{
        }

        //重載,用來處理自己定義的事件 
        protected override void  OnSizeChanged(EventArgs e)
        ...{
            base.OnSizeChanged(e); 

            if (this.OnFormMinSize != null && this.WindowState == FormWindowstate.Minimized) 
            ...{ 
                this.OnFormMinSize(this,e); 
     } 
        } 

    }

 

2)父窗體在載入子窗體的時候,綁定自定義的事件。最小化的時候,把子窗體隱藏,並且在狀態欄中添加一個標簽控件。當單擊標簽控件的時候,再把對應的子窗體show出來



    public partial class FormMain : Form
    ...{
        public FormMain()
        ...{
            InitializeComponent();
        }

        private void menuitemChildForm_Click(object sender, EventArgs e)
        ...{
            FormChild childform = new FormChild();
            childform.MdiParent = this;

            //添加事件 
            childform.OnFormMinSize += new ChildFormBase.FormMinSize(form_OnFormMinSize);
            childform.Show(); 
        }

        private void form_OnFormMinSize(object sender, EventArgs e)
 ...{
            //獲取子窗體 
            Form childForm = (Form)sender;

            //最小化的時候,狀態欄添加一個控件 
            //加上childForm.Visible   ==   true條件為了防止被添加兩次,具體原因測試一下就知道了 
            if (childForm.Visible == true)
            ...{
                childForm.Hide();

                //狀態欄添加一個控件 
                ToolStripStatusLabel statusLabel = new ToolStripStatusLabel();
                statusLabel.Text = childForm.Text;
                statusLabel.Tag = childForm;
                statusLabel.BorderSides = ToolStripStatusLabelBorderSides.All;
                statusLabel.BorderStyle = Border3DStyle.RaisedInner;
                statusLabel.Click += new EventHandler(statusLabel_Click);

                this.statusStrip.Items.Add(statusLabel);
            }
        }

        private void statusLabel_Click(object sender, EventArgs e)
   ...{
            ToolStripStatusLabel statusLabel = (ToolStripStatusLabel)sender;

            if (statusLabel.Tag != null && statusLabel.Tag is Form)
            ...{
                Form form = (Form)statusLabel.Tag;
                form.WindowState = FormWindowstate.Normal;
                form.Show();

                this.statusStrip.Items.Remove(statusLabel);
                statusLabel.Dispose();
            }
        } 

    }

如果把statusStrip的LayoutStyle設置成Flow,那麼就可以看到下圖的效果:

 



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved