添加工具条拖动功能

This commit is contained in:
zqm
2025-11-10 08:28:45 +08:00
parent 40da17055c
commit d9ae13af23

View File

@@ -49,6 +49,10 @@ namespace JoyD.Windows.CS
private bool _isMoving = false;
private Point _startMovePoint;
// 工具条拖动相关变量
private ToolStrip _draggedToolStrip = null;
private Point _dragStartPoint;
public Setting()
{
InitializeComponent();
@@ -74,6 +78,59 @@ namespace JoyD.Windows.CS
{
Console.WriteLine("删除按钮初始化失败: " + ex.Message);
}
// 为工具条添加拖动事件
toolStrip.MouseDown += ToolStrip_MouseDown;
tempDiffToolStrip.MouseDown += ToolStrip_MouseDown;
toolStripContainer.ContentPanel.MouseMove += ContentPanel_MouseMove;
toolStripContainer.ContentPanel.MouseUp += ContentPanel_MouseUp;
}
/// <summary>
/// 工具条鼠标按下事件 - 开始拖动
/// </summary>
private void ToolStrip_MouseDown(object sender, MouseEventArgs e)
{
// 确保点击的是工具条的空白区域或标题栏
if (e.Button == MouseButtons.Left && (e.X < toolStrip.PreferredSize.Width && e.Y < 25))
{
_draggedToolStrip = sender as ToolStrip;
_dragStartPoint = e.Location;
_draggedToolStrip.Cursor = Cursors.SizeAll;
}
}
/// <summary>
/// 内容面板鼠标移动事件 - 处理拖动
/// </summary>
private void ContentPanel_MouseMove(object sender, MouseEventArgs e)
{
if (_draggedToolStrip != null)
{
// 计算新位置
Point newLocation = toolStripContainer.ContentPanel.PointToClient(_draggedToolStrip.PointToScreen(e.Location));
newLocation.X -= _dragStartPoint.X;
newLocation.Y -= _dragStartPoint.Y;
// 确保位置在有效范围内
newLocation.X = Math.Max(0, Math.Min(newLocation.X, toolStripContainer.ContentPanel.Width - _draggedToolStrip.Width));
newLocation.Y = Math.Max(0, Math.Min(newLocation.Y, toolStripContainer.ContentPanel.Height - _draggedToolStrip.Height));
// 设置新位置
_draggedToolStrip.Location = newLocation;
}
}
/// <summary>
/// 内容面板鼠标释放事件 - 结束拖动
/// </summary>
private void ContentPanel_MouseUp(object sender, MouseEventArgs e)
{
if (_draggedToolStrip != null)
{
_draggedToolStrip.Cursor = Cursors.Default;
_draggedToolStrip = null;
}
}
/// <summary>