none
多個Form靠近互黏 RRS feed

  • 問題

  • 我有3個Form

    想弄得像千千靜聽那樣

    Form2 Form3靠近Form1就黏上去

    然後可以靠著拉Form1就拉動全部

    請問這該怎麼實現呢?

    2013年12月4日 上午 08:08

解答

所有回覆

  • 您好 我下載了WeifenLuo.WinFormsUI.Docking.dll

    然後根據這篇去試看看

    http://blog.csdn.net/gaoyunpeng/article/details/3873217


    public partial class Form2 : DockContent  

    DockContent沒辦法加

    找不到型別或命名空間名稱 'DockContent' (您是否遺漏 using 指示詞或組件參考?)


    2013年12月4日 上午 10:00
  • [C#]主表單與附屬表單間的相黏與分離

    http://www.dotblogs.com.tw/chou/archive/2009/02/23/7271.aspx


    歡迎參觀我的Blog【菜鳥自救會】

    • 已標示為解答 KikrW 2013年12月5日 上午 12:56
    2013年12月4日 上午 10:17
    版主
  • 您好,

    是少了namespace。

    WeifenLuo.WinFormsUI.Docking.DockContent


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年12月4日 上午 10:37
  • Hi,

    你應該是有個主視窗去觸發其它視窗浮現

    要達到這個需求

    你可以處理副視窗的Move事件

    判斷是否在視窗的邊緣

    邊緣的判斷應該有個容許範圍

    當小於這個容許範圍

    則自動將副視窗的位置設在主視窗的邊緣

    而主視窗在移動時也要去移動黏在邊緣的視窗

    這樣就可以了

    可以參考下面程式

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication6
    {
        public partial class Form1 : Form
        {
    		#region Fields 
            private HashSet<Form> _snappedForms;
    		#endregion Fields 
    
    		#region Properties 
            public HashSet<Form> m_SnappedForms
            {
                get 
                {
                    return _snappedForms ?? (_snappedForms = new HashSet<Form>());
                }
            }
    		#endregion Properties 
    
    		#region Constructors 
            public Form1()
            {
                InitializeComponent();
    
                this.Move += Form1_Move;
            }
    		#endregion Constructors 
    
    		#region Methods 
            private void button1_Click(object sender, EventArgs e)
            {
                var form = new Form();
    
                form.Move += (s, ex) => CheckAndMoveSnappedForm(form);
    
                form.Show();
            }
    
            private void CheckAndMoveSnappedForm(Form form)
            {
                if (form == null)
                    throw new ArgumentNullException("form");
    
                var margin = 50;
                if (Math.Abs(form.Top - this.Bottom) <= margin && Math.Abs(form.Left - this.Left) <= margin)
                {
                    form.Top = this.Bottom;
                    form.Left = this.Left;
    
                    m_SnappedForms.Add(form);
                }
                else if (Math.Abs(form.Left - this.Right) <= margin && Math.Abs(form.Top - this.Top) <= margin)
                {
                    form.Top = this.Top;
                    form.Left = this.Right;
    
                    m_SnappedForms.Add(form);
                }
                else
                    m_SnappedForms.Remove(form);
            }
    
            void Form1_Move(object sender, EventArgs e)
            {
                foreach (var form in m_SnappedForms)
                    CheckAndMoveSnappedForm(form);
            }
    		#endregion Methods 
        }
    }
    


    謙卑學習,持之以恆,才能不斷的Level Up

    • 已提議為解答 CarbonDiarox 2015年12月10日 上午 02:26
    • 已取消提議為解答 CarbonDiarox 2015年12月10日 上午 02:27
    2013年12月5日 上午 03:08