lu
2025-02-26 3d429071ceeda5ce75ca660c13459c13f3d92337
DevApp/Gs.DevApp/ToolBox/DragResizeHelp.cs
@@ -1,4 +1,5 @@
using System;
using DevExpress.XtraBars.Docking;
using System;
using System.Drawing;
using System.Windows.Forms;
@@ -13,14 +14,14 @@
        private const int MinHeight = 30;
        private EnumMousePointPosition m_MousePointPosition;
        private Point p, p1;
        private DevExpress.XtraEditors.LabelControl sbMsg;
        private Control dragBox1;//容器1
        private string dragCurrent_Name = "";//当前容器的名称
        private string dragBoxCurrentName = "";//当前容器的名称
        private Control ctrlCurrentObj;//当前拖拖动的对像
        private DevExpress.XtraBars.Docking.DockManager dockManager1;
        private DevExpress.XtraBars.Docking.DockPanel dockPanel1;
        private DevExpress.XtraBars.Docking.ControlContainer dockPanel1_Container;
        private System.ComponentModel.IContainer components = null;
        private ToolTip toolTip;
        #endregion
        #region Inner Object
        private enum EnumMousePointPosition
@@ -37,11 +38,11 @@
            MouseDrag = 9   // '鼠标拖动
        }
        #endregion
        public DragResizeHelp(DevExpress.XtraEditors.XtraForm frm, Control regBox, DevExpress.XtraEditors.LabelControl regMsg)
        public DragResizeHelp(DevExpress.XtraEditors.XtraForm frm, Control regBox)
        {
            toolTip = new ToolTip();
            this.components = new System.ComponentModel.Container();
            dragBox1 = regBox;
            sbMsg = regMsg;
            this.components = new System.ComponentModel.Container();
            this.dockManager1 = new DevExpress.XtraBars.Docking.DockManager(this.components);
            dockManager1.BeginUpdate();
@@ -81,7 +82,7 @@
            this.dockPanel1.Name = "dockPanel1";
            this.dockPanel1.OriginalSize = new System.Drawing.Size(200, 200);
            this.dockPanel1.Size = new System.Drawing.Size(306, 459);
            this.dockPanel1.Text = "dockPanel1";
            this.dockPanel1.Text = "组件箱";
            dockPanel1.Options.AllowDockBottom = false;
            dockPanel1.Options.AllowDockFill = false;
            dockPanel1.Options.AllowDockLeft = false;
@@ -103,7 +104,7 @@
            frm.AutoScaleDimensions = new System.Drawing.SizeF(8F, 18F);
            frm.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            frm.ClientSize = new System.Drawing.Size(1057, 660);
            ((System.ComponentModel.ISupportInitialize)(this.dockManager1)).EndInit();
            this.dockPanel1.ResumeLayout(false);
            frm.ResumeLayout(false);
@@ -117,7 +118,6 @@
                {
                    if (control != null)
                    {
                        control.MouseDown -= new MouseEventHandler(control_MouseDown);
                        control.MouseLeave -= new EventHandler(control_MouseLeave);
                        control.MouseMove -= new MouseEventHandler(control_MouseMove);
@@ -129,19 +129,25 @@
        }
        public void Show()
        {
            if (dockPanel1.Visibility == DockVisibility.Visible)
                return;
            foreach (Control control in dragBox1.Controls)
            {
                if (control != null)
                {
                    dragCurrent_Name = dragBox1.Name;
                    dragBoxCurrentName = dragBox1.Name;
                    control.MouseDown += new MouseEventHandler(control_MouseDown);
                    control.MouseLeave += new EventHandler(control_MouseLeave);
                    control.MouseMove += new MouseEventHandler(control_MouseMove);
                    control.MouseUp += Control_MouseUp;
                    control.Resize += myPanel_Resize;
                    control.ContextMenuStrip = new ContextMenuStrip();
                }
            }
            dockPanel1.Show();
            isDragging = true;
        }
        public void Hide(Control control)
        {
@@ -150,16 +156,20 @@
                control.MouseDown -= new MouseEventHandler(control_MouseDown);
                control.MouseLeave -= new EventHandler(control_MouseLeave);
                control.MouseMove -= new MouseEventHandler(control_MouseMove);
                control.MouseUp -= Control_MouseUp;
                control.Resize -= myPanel_Resize;
            }
            dockPanel1.Hide();
            isDragging = false;
        }
        #region Public Method
        private void Control_MouseUp(object sender, MouseEventArgs e)
        {
            Control lCtrl = (sender as Control);
            ctrlCurrentObj = lCtrl;
            (sender as Control).Refresh();
            dragCurrent_Name = (sender as Control).Parent.Name;
            if (dragBox1.Name == dragCurrent_Name)
            dragBoxCurrentName = (sender as Control).Parent.Name;
            if (dragBox1.Name == dragBoxCurrentName)
            {
                if (IsOutsideBounds(lCtrl, dragBox1))
                {
@@ -168,11 +178,11 @@
                    lCtrl.Left = 0;
                    lCtrl.Top = 10;
                    //   isDragging = false;
                    dragCurrent_Name = dockPanel1_Container.Name;
                    dragBoxCurrentName = dockPanel1_Container.Name;
                }
                reloadLoaction(null);
            }
            else if (dockPanel1_Container.Name == dragCurrent_Name)
            else if (dockPanel1_Container.Name == dragBoxCurrentName)
            {
                if (IsOutsideBounds(lCtrl, dockPanel1_Container))
                {
@@ -181,7 +191,7 @@
                    lCtrl.Left = 0;
                    lCtrl.Top = 10;
                    // isDragging = false;
                    dragCurrent_Name = dragBox1.Name;
                    dragBoxCurrentName = dragBox1.Name;
                }
                reloadLoaction(lCtrl);
            }
@@ -194,7 +204,34 @@
            p1.X = e.X;
            p1.Y = e.Y;
            isDragging = true;
            dragCurrent_Name = (sender as Control).Parent.Name;
            dragBoxCurrentName = (sender as Control).Parent.Name;
            ctrlCurrentObj = (sender as Control);
            if (e.Button == MouseButtons.Right)
            {
                Control control = (sender as Control);
                var menu = control.ContextMenuStrip;
                menu.Items.Clear();
                SetDrag frm = new SetDrag();
                menu.Items.Add($"设置坐标", null, (ss, ee) =>
                {
                    frm.ShowDialog();
                });
                menu.Items.Add($"设置大小", null, (ss, ee) =>
                {
                    frm.ShowDialog();
                });
                menu.Items.Add($"高级设置", null, (ss, ee) =>
                {
                    frm.ShowDialog();
                });
                menu.Items.Add($"一键重排", null, (ss, ee) =>
                {
                    frm.ShowDialog();
                });
                menu.Show(control, e.Location);
            }
        }
        private void myPanel_Resize(object sender, EventArgs e)
        {
@@ -216,11 +253,13 @@
            m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;
            Control control = sender as Control;
            control.Cursor = Cursors.Arrow;
            ctrlCurrentObj = control;
        }
        private void control_MouseMove(object sender, MouseEventArgs e)
        {
            if (!isDragging) { return; }
            Control lCtrl = (sender as Control);
            ctrlCurrentObj = lCtrl;
            if (e.Button == MouseButtons.Left)
            {
                switch (m_MousePointPosition)
@@ -331,6 +370,8 @@
            }
            //  reloadLoaction();
            reloadMsg(lCtrl);
        }
        private EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e)
        {
@@ -435,7 +476,7 @@
        private void reloadLoaction(Control cocccc)
        {
            int _top = 0;
            if (dockPanel1_Container.Name == dragCurrent_Name)
            if (dockPanel1_Container.Name == dragBoxCurrentName)
            {
                foreach (Control col in dockPanel1_Container.Controls)
                {
@@ -466,9 +507,15 @@
            return;
        }
        private void reloadMsg(Control cocccc) {
            sbMsg.Text = "坐标:" + cocccc.Location.ToString() + ",大小:" + cocccc.Size.ToString();
        private void reloadMsg(Control cocccc)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            if (ctrlCurrentObj != null)
                sb.Append(ctrlCurrentObj.Name + "在");
            sb.Append(string.IsNullOrEmpty(dragBoxCurrentName) ? "表单中" : "组件箱中");
            sb.Append(",坐标:" + cocccc.Location.ToString());
            sb.Append(",大小:" + cocccc.Size.ToString());
            toolTip.SetToolTip(ctrlCurrentObj, sb.ToString());
        }
    }
}