C# 使用 TableLayoutPanel 实现无边框窗体全屏拖动
如果你已经有很多的 'TableLayoutPanel' 控件覆盖了整个窗体,并且想要让一个新的 'Panel' 控件填充整个窗体,你可以使用 'TableLayoutPanel' 控件的 'SetRowSpan' 和 'SetColumnSpan' 方法来使该控件占据整个网格。
以下是一个示例代码:
using System;
using System.Windows.Forms;
namespace WindowsFormsApp
{
public partial class MainForm : Form
{
private bool isDragging = false; // 是否正在拖动
private int mouseX, mouseY; // 鼠标在窗体上的相对位置
public MainForm()
{
InitializeComponent();
// 让 panelDrag 控件填充整个窗体
tableLayoutPanel1.Controls.Add(panelDrag, 0, 0);
tableLayoutPanel1.SetRowSpan(panelDrag, tableLayoutPanel1.RowCount);
tableLayoutPanel1.SetColumnSpan(panelDrag, tableLayoutPanel1.ColumnCount);
// 将 panelDrag 控件的 Dock 属性设置为 Fill
panelDrag.Dock = DockStyle.Fill;
}
private void panelDrag_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isDragging = true;
mouseX = e.X;
mouseY = e.Y;
}
}
private void panelDrag_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
this.Left += e.X - mouseX;
this.Top += e.Y - mouseY;
}
}
private void panelDrag_MouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
}
}
}
在以上示例代码中,我们假设你的 'TableLayoutPanel' 控件是 'tableLayoutPanel1'。我们将 'panelDrag' 控件添加到 'tableLayoutPanel1' 的第一个单元格,并使用 'SetRowSpan' 和 'SetColumnSpan' 方法将其设置为占据整个表格。
然后,我们将 'panelDrag' 控件的 'Dock' 属性设置为 'Fill',以使其填充整个单元格。
通过以上代码,你可以实现无边框窗体中覆盖整个窗体的多个 'TableLayoutPanel' 控件,同时让一个新的 'Panel' 控件填充整个窗体,并通过控制该 'Panel' 控件的鼠标事件来实现拖动功能。当鼠标按下并拖动 'Panel' 控件时,整个窗体都会跟随鼠标移动。请确保将示例代码中的 'tableLayoutPanel1' 和 'panelDrag' 替换为你实际使用的控件名称,并在窗体设计器中将 'MouseDown'、'MouseMove' 和 'MouseUp' 事件与对应的事件处理程序关联起来。
原文地址: https://www.cveoy.top/t/topic/lOY 著作权归作者所有。请勿转载和采集!