From 97c16ca7943f36d1631a843df27628d5eada9eb2 Mon Sep 17 00:00:00 2001 From: lu <99954486@qq.com> Date: 星期五, 07 三月 2025 16:09:20 +0800 Subject: [PATCH] 受托 --- DevApp/Gs.DevApp/ToolBox/DragResizeHelp.cs | 361 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 252 insertions(+), 109 deletions(-) diff --git a/DevApp/Gs.DevApp/ToolBox/DragResizeHelp.cs b/DevApp/Gs.DevApp/ToolBox/DragResizeHelp.cs index a7a52f2..a2f3b9b 100644 --- a/DevApp/Gs.DevApp/ToolBox/DragResizeHelp.cs +++ b/DevApp/Gs.DevApp/ToolBox/DragResizeHelp.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing DevExpress.XtraBars.Docking; +using System; using System.Drawing; using System.Windows.Forms; @@ -7,18 +8,21 @@ public class DragResizeHelp { #region Field - private static bool isDragging = false; + private bool isDragging = false; private const int Band = 5; - private const int MinWidth = 10; - private const int MinHeight = 10; - private static EnumMousePointPosition m_MousePointPosition; - private static Point p, p1; - private static Label sbMsg; - private static Control dragBox1; - private static string dragCurrent_Name = ""; - private static DevExpress.XtraBars.Docking.ControlContainer dockPanel1_Container; + private const int MinWidth = 50; + private const int MinHeight = 30; + private EnumMousePointPosition m_MousePointPosition; + private Point p, p1; + private Control dragBox1;//瀹瑰櫒1 + 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 { @@ -34,98 +38,202 @@ MouseDrag = 9 // '榧犳爣鎷栧姩 } #endregion - - #region Constructor - public DragResizeHelp() + public DragResizeHelp(DevExpress.XtraEditors.XtraForm frm, Control regBox) { - // Nothing to do. - } - #endregion - private static void InitializeComponent(DevExpress.XtraEditors.XtraForm frm) - { - DevExpress.XtraBars.Docking.DockManager dockManager1; - DevExpress.XtraBars.Docking.DockPanel dragBox2_Container; - dockManager1 = new DevExpress.XtraBars.Docking.DockManager(); - dragBox2_Container = new DevExpress.XtraBars.Docking.DockPanel(); - dockPanel1_Container = new DevExpress.XtraBars.Docking.ControlContainer(); - ((System.ComponentModel.ISupportInitialize)(dockManager1)).BeginInit(); + // toolTip = new ToolTip(); + this.components = new System.ComponentModel.Container(); + dragBox1 = regBox; + this.components = new System.ComponentModel.Container(); + this.dockManager1 = new DevExpress.XtraBars.Docking.DockManager(this.components); + dockManager1.BeginUpdate(); + this.dockPanel1 = new DevExpress.XtraBars.Docking.DockPanel(); + this.dockPanel1_Container = new DevExpress.XtraBars.Docking.ControlContainer(); + ((System.ComponentModel.ISupportInitialize)(this.dockManager1)).BeginInit(); + this.dockPanel1.SuspendLayout(); + frm.SuspendLayout(); // // dockManager1 // - dockManager1.Form = frm; - dockManager1.RootPanels.AddRange(new DevExpress.XtraBars.Docking.DockPanel[] { - dragBox2_Container}); + this.dockManager1.Form = frm; + this.dockManager1.RootPanels.AddRange(new DevExpress.XtraBars.Docking.DockPanel[] { + this.dockPanel1}); + this.dockManager1.TopZIndexControls.AddRange(new string[] { + "DevExpress.XtraBars.BarDockControl", + "DevExpress.XtraBars.StandaloneBarDockControl", + "System.Windows.Forms.MenuStrip", + "System.Windows.Forms.StatusStrip", + "System.Windows.Forms.StatusBar", + "DevExpress.XtraBars.Ribbon.RibbonStatusBar", + "DevExpress.XtraBars.Ribbon.RibbonControl", + "DevExpress.XtraBars.Navigation.OfficeNavigationBar", + "DevExpress.XtraBars.Navigation.TileNavPane", + "DevExpress.XtraBars.TabFormControl", + "DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormControl", + "DevExpress.XtraBars.ToolbarForm.ToolbarFormControl"}); // // dockPanel1 // - dragBox2_Container.Controls.Add(dockPanel1_Container); - dragBox2_Container.Dock = DevExpress.XtraBars.Docking.DockingStyle.Float; - dragBox2_Container.FloatLocation = new System.Drawing.Point(691, 455); - dragBox2_Container.ID = new System.Guid("319a7cf1-f26d-4049-8a96-8f9fbbd13cd2"); - dragBox2_Container.Location = new System.Drawing.Point(0, 0); - dragBox2_Container.Name = "dockPanel1"; - dragBox2_Container.OriginalSize = new System.Drawing.Size(200, 200); - dragBox2_Container.Size = new System.Drawing.Size(200, 200); - dragBox2_Container.Text = "dockPanel1"; - dragBox2_Container.Options.AllowDockBottom = false; - dragBox2_Container.Options.AllowDockFill = false; - dragBox2_Container.Options.AllowDockLeft = false; - dragBox2_Container.Options.AllowDockRight = false; - dragBox2_Container.Options.AllowDockTop = false; - dragBox2_Container.Options.ShowMaximizeButton = false; - dragBox2_Container.Options.ShowMaximizeButton = false; + this.dockPanel1.Controls.Add(this.dockPanel1_Container); + this.dockPanel1.Dock = DevExpress.XtraBars.Docking.DockingStyle.Float; + this.dockPanel1.FloatLocation = new System.Drawing.Point(1617, 547); + this.dockPanel1.FloatSize = new System.Drawing.Size(306, 459); + this.dockPanel1.ID = new System.Guid("7148938b-5fd8-4833-9a9f-445a728a11cf"); + this.dockPanel1.Location = new System.Drawing.Point(0, 0); + 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.Options.AllowDockBottom = false; + dockPanel1.Options.AllowDockFill = false; + dockPanel1.Options.AllowDockLeft = false; + dockPanel1.Options.AllowDockRight = false; + dockPanel1.Options.AllowDockTop = false; + dockPanel1.Options.ShowMaximizeButton = false; + dockPanel1.Options.ShowMaximizeButton = false; // // dockPanel1_Container // - dockPanel1_Container.Location = new System.Drawing.Point(5, 32); - dockPanel1_Container.Name = "dockPanel1_Container"; - dockPanel1_Container.Size = new System.Drawing.Size(190, 164); - dockPanel1_Container.TabIndex = 0; + this.dockPanel1_Container.Location = new System.Drawing.Point(5, 32); + this.dockPanel1_Container.Name = "dockPanel1_Container"; + this.dockPanel1_Container.Size = new System.Drawing.Size(296, 423); + this.dockPanel1_Container.TabIndex = 0; + this.dockPanel1_Container.BorderStyle = System.Windows.Forms.BorderStyle.None; // - // XtraForm3 + // XtraForm1 // - ((System.ComponentModel.ISupportInitialize)(dockManager1)).EndInit(); - dragBox2_Container.ResumeLayout(false); - frm.ResumeLayout(false); - dragBox2_Container.Show(); - } - #region Public Method - public static void RegisterControl(DevExpress.XtraEditors.XtraForm frm, Control control, Control box1, Label lbMsg) - { - InitializeComponent(frm); - if (control != null) - { - sbMsg = lbMsg; - dragBox1 = box1; - dragCurrent_Name = box1.Name; - control.MouseDown += new MouseEventHandler(control_MouseDown); - control.MouseLeave += new EventHandler(control_MouseLeave); - control.MouseMove += new MouseEventHandler(control_MouseMove); - control.Resize += myPanel_Resize; - } - } + frm.AutoScaleDimensions = new System.Drawing.SizeF(8F, 18F); + frm.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + frm.ClientSize = new System.Drawing.Size(1057, 660); - public static void UnRegisterControl(Control control) + ((System.ComponentModel.ISupportInitialize)(this.dockManager1)).EndInit(); + this.dockPanel1.ResumeLayout(false); + frm.ResumeLayout(false); + dockManager1.EndUpdate(); + + this.dockPanel1.Hide(); + + dockPanel1.ClosedPanel += (s, e) => + { + foreach (Control control in dragBox1.Controls) + { + if (control != null) + { + 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; + } + } + }; + } + public void Show() + { + if (dockPanel1.Visibility == DockVisibility.Visible) + return; + foreach (Control control in dragBox1.Controls) + { + if (control != null) + { + 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) { if (control != null) { 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; } - #endregion - private static void control_MouseDown(object sender, MouseEventArgs e) + #region Public Method + private void Control_MouseUp(object sender, MouseEventArgs e) + { + Control lCtrl = (sender as Control); + ctrlCurrentObj = lCtrl; + (sender as Control).Refresh(); + dragBoxCurrentName = (sender as Control).Parent.Name; + if (dragBox1.Name == dragBoxCurrentName) + { + if (IsOutsideBounds(lCtrl, dragBox1)) + { + dragBox1.Controls.Remove(lCtrl); + dockPanel1_Container.Controls.Add(lCtrl); + lCtrl.Left = 0; + lCtrl.Top = 10; + // isDragging = false; + dragBoxCurrentName = dockPanel1_Container.Name; + } + // reloadLoaction(null); + } + else if (dockPanel1_Container.Name == dragBoxCurrentName) + { + if (IsOutsideBounds(lCtrl, dockPanel1_Container)) + { + dockPanel1_Container.Controls.Remove(lCtrl); + dragBox1.Controls.Add(lCtrl); + lCtrl.Left = 0; + lCtrl.Top = 10; + // isDragging = false; + dragBoxCurrentName = dragBox1.Name; + } + reloadLoaction(lCtrl); + } + + } + private void control_MouseDown(object sender, MouseEventArgs e) { p.X = e.X; p.Y = e.Y; 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); - private static void myPanel_Resize(object sender, EventArgs e) + 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) => + { + reloadLoaction((sender as Control).Parent); + }); + menu.Show(control, e.Location); + } + + } + private void myPanel_Resize(object sender, EventArgs e) { Control panel = sender as Control; if (panel != null && panel.Controls.Count > 0) @@ -137,19 +245,21 @@ int newY = (panel.ClientSize.Height - childControl.Height) / 2; childControl.Location = new Point(childControl.Location.X, newY); } - } + reloadMsg(panel); } - private static void control_MouseLeave(object sender, EventArgs e) + private void control_MouseLeave(object sender, EventArgs e) { m_MousePointPosition = EnumMousePointPosition.MouseSizeNone; Control control = sender as Control; control.Cursor = Cursors.Arrow; + ctrlCurrentObj = control; } - private static void control_MouseMove(object sender, MouseEventArgs e) + 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) @@ -170,7 +280,7 @@ p1.Y = e.Y; //'璁板綍鍏夋爣鎷栧姩鐨勫綋鍓嶇偣 break; case EnumMousePointPosition.MouseSizeRight: - lCtrl.Width = lCtrl.Width + e.X - p1.X; // + lCtrl.Width = lCtrl.Width + e.X - p1.X; lCtrl.Height = lCtrl.Height + e.Y - p1.Y; p1.X = e.X; p1.Y = e.Y; //'璁板綍鍏夋爣鎷栧姩鐨勫綋鍓嶇偣 @@ -249,37 +359,21 @@ default: break; } - } - - if (dragBox1.Name == dragCurrent_Name) - { - if (IsOutsideBounds(lCtrl, dragBox1)) - { - dragBox1.Controls.Remove(lCtrl); - dockPanel1_Container.Controls.Add(lCtrl); - lCtrl.Left = 0; - lCtrl.Top = 10; - isDragging = false; - dragCurrent_Name = dockPanel1_Container.Name; - } + control.Refresh(); + Graphics g = control.CreateGraphics(); + int width = control.Width; + int height = control.Height; + Point[] ps = { new Point(0, 0),new Point(width - 1, 0), + new Point(width - 1, height - 1),new Point(0, height - 1),new Point(0, 0) }; + g.DrawLines(new Pen(Color.Pink), ps); } - else if (dockPanel1_Container.Name == dragCurrent_Name) - { - if (IsOutsideBounds(lCtrl, dockPanel1_Container)) - { - dockPanel1_Container.Controls.Remove(lCtrl); - dragBox1.Controls.Add(lCtrl); - lCtrl.Left = 0; - lCtrl.Top = 10; - isDragging = false; - dragCurrent_Name = dragBox1.Name; - } - } - sbMsg.Text = lCtrl.Location.ToString() + "瀹瑰櫒锛�" + dragCurrent_Name; - + // reloadLoaction(); + reloadMsg(lCtrl); + + } - private static EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e) + private EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e) { if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height)) { @@ -346,8 +440,7 @@ return EnumMousePointPosition.MouseSizeNone; } } - - public static bool IsOutsideBounds(Control childControl, Control parentControl) + public bool IsOutsideBounds(Control childControl, Control parentControl) { if (parentControl == null) return true; if (parentControl == null) return true; @@ -378,5 +471,55 @@ // 濡傛灉瀛愭帶浠剁殑鎵�鏈夎竟鐣岄兘鍦ㄧ埗鎺т欢鐨勮竟鐣屽唴锛屽垯杩斿洖false return false; } + #endregion + + private void reloadLoaction(Control cocccc) + { + int _top = 0; + //濡傛灉鏄帶浠剁锛屼笉绉籐eft + if (dockPanel1_Container.Name == dragBoxCurrentName) + { + foreach (Control col in dockPanel1_Container.Controls) + { + col.Left = 0; + col.Top = _top; + _top += (col.Height + 2); + } + return; + } + if (cocccc == null) return; + //杩欐槸瀹瑰櫒 + int x = 2; + int y = 2; + foreach (Control btn in dragBox1.Controls) + { + if (cocccc.Name == btn.Name) + continue; + if (cocccc.Visible ==false) + continue; + btn.Left = x; + btn.Top = y; + x += btn.Width + 2; + if (btn.Width > dragBox1.Width - x) + { + x = 2; + y += btn.Height +2; + } + } + cocccc.Left = x; + cocccc.Top = y; + return; + } + + 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()); + } } } \ No newline at end of file -- Gitblit v1.9.3