在Windows窗体上添加按钮到窗口的侧面
我想在C# (在外面)的窗体侧面添加按钮。 窗口移动后,按钮应一起移动。
例如 :
我看到两个选择:
-
将按钮放在一个单独的表单中,并通过编写
Move
和Resize
事件来使两个表单粘在一起。 -
或者,更简单,使表单透明并删除
Border
和Title
区域。 我会选择这个选项。
干得好:
首先,您将表单设置为:
- 设置
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
内的Label
(label1
),填充顶部并保存表单的标题文本 - 一个
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。