星期四, 4月 14, 2016

[C#] MDI 子視窗最大化只顯示關閉按鈕

WinForm MDI 模式下,子視窗最大化情況下,會出現[最小化]、[還原]和[關閉] 這三個 Button(之後簡稱系統按鈕),但只希望出現 [關閉] Button 就好

[C#] MDI 子視窗最大化只顯示關閉按鈕-1

嘗試過
  1. 子視窗的 [MaximizeBox = false 和 MinimizeBox = false] 或 [FormBorderStyle = FormBorderStyle.None],該兩種設定在子視窗非最大化的情況下是會有作用,但子視窗最大化後,還是會出現系統按鈕
  2. 子視窗的 ControlBox 設為 false,不論子視窗是否最大化,都不會出現系統按鈕,但是子視窗在最大化情況下,沒有標題列

改善方式:在 MDI Form(父視窗) 上加上 MenuStrip 控件,並透過 ItemAdd Event 來判斷並顯示[關閉] Button
namespace MDIMax
{
    public partial class ParentForm : Form
    {
        public ParentForm()
        {
            InitializeComponent();
        }

        private void ParentForm_Load(object sender, EventArgs e)
        {
            // MID Form (父視窗) 設定
            this.IsMdiContainer = true;
            this.WindowState = FormWindowState.Maximized;
            this.menuStrip1.ItemAdded += menuStrip1_ItemAdded;
   
            // 呼叫子視窗
            ChildForm c = new ChildForm();
            c.MdiParent = this;
            c.WindowState = FormWindowState.Maximized;
            c.Show();
        }

        void menuStrip1_ItemAdded(object sender, ToolStripItemEventArgs e)
        {
            // 一律先隱藏
            e.Item.Visible = false;

            string Text = e.Item.Text;
            if (!string.IsNullOrEmpty(Text) && Text.Substring(0, 2) == "關閉")
                e.Item.Visible = true;
        }
    }
}
[C#] MDI 子視窗最大化只顯示關閉按鈕-2

該作法缺點:因為是透過 e.Item.Text 來判斷是哪個按鈕,假如不同語系情況下,應該就 GG 了,Orz

沒有留言:

張貼留言