在Windows窗体上添加按钮到窗口的侧面

我想在C# (在外面)的窗体侧面添加按钮。 窗口移动后,按钮应一起移动。

例如 :

在此处输入图像描述

我看到两个选择:

  • 将按钮放在一个单独的表单中,并通过编写MoveResize事件来使两个表单粘在一起。

  • 或者,更简单,使表单透明并删除BorderTitle区域。 我会选择这个选项。

干得好:

在此处输入图像描述

首先,您将表单设置为:

  • 设置this.ControlBox = false;
  • 设置this.MaximizeBox = false;
  • 设置this.MinimizeBox = false;
  • 设置this.Text= "";
  • 设置this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
  • 设置this.BackColor = System.Drawing.Color.Fuchsia;
  • 设置this.TransparencyKey = this.BackColor;

现在添加到Form

  • 填写Form主要部分的Panel
  • 你想要附加的Button
  • Panel内的Labellabel1 ),填充顶部并保存表单的标题文本
  • 一个Tab控件等..

最后,我们要添加代码以使表单可移动

 using System.Runtime.InteropServices; .. public const int WM_NCLBUTTONDOWN = 0xA1; public const int HT_CAPTION = 0x2; [DllImportAttribute("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImportAttribute("user32.dll")] public static extern bool ReleaseCapture(); private void label1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ReleaseCapture(); SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); } } 

你也可以查找代码来使窗口变大。

您可以使用区域查找代码以使按钮呈现非矩形形状。 请注意,您需要在此处避免消除锯齿的像素,否则紫红色将会闪耀。

我相信按钮上的anchor属性是你正在寻找的。 锚通过使控件跟随其锚定的边缘而在控件上运行。 例如,如果您锚定到底部并通过从底部拖动窗口使窗口变大,则控件将向下移动您的窗体。 您也可以锚定到多个边缘。 也可以使用Dock ,这会导致按钮尺寸扩大但不一定四处移动。

请参阅此post了解锚点与docker。