[C#]主表單與附屬表單間的相黏與分離

  • 9972
  • 0
  • 2010-08-02

在很多的軟體設計中,會將主表單與附屬表單分開製作,且可以黏在一起,也可以分離,本文希望能製作一個小程式,來讓初學者了解這部份的功能原理與實現。

在很多的軟體設計中,會將主表單與附屬表單分開製作,例如知名的播放軟體Winamp把主視窗與歌曲列表分開製作,且可以黏在一起,也可以分離,本文章的目的希望能製作一個小程式,來讓初學者了解這部份的功能原理與實現。

我們可以知道,為了要使主表單與附屬表單黏在一起,表單的座標將是一大關鍵,
而如果要讓附屬表單黏在主表單的右側,那只要讓

附屬表單的X座標 = 將主表單的X座標加上主表單的寬度
附屬表單的Y座標 = 主表單的Y座標

就能得到簡單的效果

以下為程式碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;


namespace Popup
{      

    public partial class MainForm : Form
    {
        AncillaForm fm2;

        public MainForm()
        {
            InitializeComponent();
        }


        private void btnShow_Click(object sender, EventArgs e)
        {
            fm2  = new AncillaForm();
            fm2.WindowState = FormWindowState.Normal;
            fm2.Show();
            ChangeLocalitation();
        }
      

        private void chkStick_CheckedChanged(object sender, EventArgs e)
        {
            ChangeLocalitation();
        }


        private void MainForm_LocationChanged(object sender, EventArgs e)
        {
            ChangeLocalitation();
        }

        
        public void ChangeLocalitation()
        {
            if (fm2 != null && chkStick.Checked == true)
            {
                fm2.WindowState = FormWindowState.Normal;
                // 將目前MainForm座標值show出來,這部分與表單分離與相黏無關
                this.Text = this.Location.X.ToString() + ", " + this.Location.Y.ToString();    
                // AncillaForm的座標 X  = MainForm的座標 X + Form1 的寬度
                int xx = this.Location.X + this.Size.Width;
                int yy = this.Location.Y; //AncillaForm的座標 Y  = MainForm 的座標 Y
                fm2.Location = new Point(xx, yy);   // 設定 AncillaForm的座標
            }

        }

    }


}

執行結果

 

參考

http://www.blueshop.com.tw/board/show.asp?subcde=BRD20090223083124BZA&fumcde=

http://www.astahost.com/info.php/how-vb-net-pop-up-docking-forms_t5497.html