| | |
| | | using DevExpress.XtraBars.Docking; |
| | | using DevExpress.XtraEditors; |
| | | using DevExpress.XtraEditors; |
| | | using DevExpress.XtraLayout; |
| | | using DevExpress.XtraPrinting.Export; |
| | | using DevExpress.XtraRichEdit.Model; |
| | | using Gs.DevApp.ToolBox; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.Data; |
| | | using System.Drawing; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using System.Windows.Forms; |
| | | using System.Xml.Serialization; |
| | | |
| | | |
| | | namespace Gs.DevApp.DevFrm |
| | | { |
| | | public partial class XtraForm1 : DevExpress.XtraEditors.XtraForm |
| | | { |
| | | |
| | | private bool isDragging = false; |
| | | private Point dragCursorPoint; |
| | | private Point dragPanelPoint; |
| | | |
| | | |
| | | public XtraForm1() |
| | | { |
| | | InitializeComponent(); |
| | | // 初始化表单 |
| | | this.Text = "Draggable Panel Example"; |
| | | this.Size = new Size(800, 600); |
| | | |
| | | // 添加鼠标事件处理程序 |
| | | panTuo.MouseDown += new MouseEventHandler(DraggablePanel_MouseDown); |
| | | panTuo.MouseMove += new MouseEventHandler(DraggablePanel_MouseMove); |
| | | panTuo.MouseUp += new MouseEventHandler(DraggablePanel_MouseUp); |
| | | |
| | | } |
| | | private void DraggablePanel_MouseDown(object sender, MouseEventArgs e) |
| | | |
| | | private void button1_Click(object sender, EventArgs e) |
| | | { |
| | | if (e.Button == MouseButtons.Left) |
| | | { |
| | | isDragging = true; |
| | | dragCursorPoint = Cursor.Position; |
| | | dragPanelPoint = panTuo.Location; |
| | | panTuo.Cursor = Cursors.SizeAll; |
| | | string ddddd = GetLayoutControlXml(layoutControl1); |
| | | |
| | | } |
| | | } |
| | | |
| | | private void DraggablePanel_MouseMove(object sender, MouseEventArgs e) |
| | | public string GetLayoutControlXml(LayoutControl layoutControl) |
| | | { |
| | | if (isDragging) |
| | | { |
| | | |
| | | panTuo.Location = new Point( |
| | | dragPanelPoint.X + Cursor.Position.X - dragCursorPoint.X, |
| | | dragPanelPoint.Y + Cursor.Position.Y - dragCursorPoint.Y); |
| | | Point newLocation = panTuo.Location; |
| | | Rectangle bounds = panelControl1.Bounds; |
| | | lbMsg.Text = panTuo.Location.ToString() + "-" + bounds.ToString(); |
| | | |
| | | if (IsOutsideBounds(panTuo, panelControl1)) |
| | | { |
| | | lbMsg.Text = "超了"; |
| | | panelControl1.Controls.Remove(panTuo); |
| | | dockPanel1.Controls.Add(panTuo); |
| | | string dddd = ""; |
| | | layoutControl.SaveLayoutToXml(dddd); |
| | | // layoutControl.SaveLayoutToStream(dddd); |
| | | layoutControl1.RestoreLayoutFromXml("layout.xml"); |
| | | return dddd; |
| | | |
| | | panTuo.Location = new Point( |
| | | Math.Max(0, Math.Min(dockPanel1.Width - panTuo.Width, newLocation.X - dockPanel1.Location.X)), |
| | | Math.Max(0, Math.Min(dockPanel1.Height - panTuo.Height, newLocation.Y - dockPanel1.Location.Y))); |
| | | } |
| | | else |
| | | { |
| | | lbMsg.Text = panTuo.Location.ToString() + "-" + bounds.ToString(); |
| | | } |
| | | } |
| | | |
| | | |
| | | // gcMain.MainView.RestoreLayoutFromXml(fileName); |
| | | // splitContainerControl1. |
| | | } |
| | | public static bool IsOutsideBounds(Control child, Control parent) |
| | | { |
| | | // 获取控件相对于其父容器的位置和大小 |
| | | Rectangle childBounds = new Rectangle(child.Location, child.Size); |
| | | Rectangle parentBounds = new Rectangle(Point.Empty, parent.ClientSize); // 使用ClientSize获取容器的工作区大小 |
| | | |
| | | // 注意:这里我们假设child是parent的直接子控件,因此child.Location是相对于parent的。 |
| | | // 如果child不是parent的直接子控件,你需要先找到child相对于parent的相对位置。 |
| | | |
| | | // 检查childBounds是否超出了parentBounds的任何一个边界 |
| | | return !parentBounds.Contains(childBounds); |
| | | } |
| | | |
| | | private void DraggablePanel_MouseUp(object sender, MouseEventArgs e) |
| | | { |
| | | if (e.Button == MouseButtons.Left) |
| | | { |
| | | isDragging = false; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |