【问题标题】:Adding Buttons To Side Of Window On Windows Form在 Windows 窗体上的窗口一侧添加按钮
【发布时间】:2017-03-12 18:56:47
【问题描述】:

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

例如:

【问题讨论】:

  • 没有什么可以坐在窗外。我不知道你真正想要什么。使用Anchor 属性设置窗体上的按钮等控件与窗体边框的关系!
  • 您想要做的在 WPF 中是可行的。在 WinForms 中,您需要覆盖窗口函数。这需要有关原生 Windows 开发的知识,这超出了 SO 的范围。
  • 按钮应该在窗口之外。我添加了更好的图片来解释我想要什么。
  • 这是不可能的,但您可以拥有较小的额外表单,并将它们停靠在主表单上。或者您可以尝试使除了选项卡之外的左侧部分透明。
  • 在图片中,按钮不在窗口之外。我们可以假设窗口背景是透明的,它是一个左上角有一个按钮的容器(都位于一个透明的窗体上)。

标签: c# winforms user-interface


【解决方案1】:

我看到两个选项:

  • 要么将按钮放在单独的表单中,然后通过编码 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

  • Panel 填充了Form 的右侧主要部分
  • 你想附加的Button
  • Label (label1) 在主 Panel 内,填充顶部并保留表单的标题文本
  • 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);
    }
}

您也可以查找代码以使窗口变大..

您可以查找代码以使用区域为按钮提供非矩形形状。请注意,您需要在此处避免使用抗锯齿像素,否则紫红色会透出。

【讨论】:

  • 您的求解效果很好,但图像或文本的抗锯齿边缘周围有粉红色部分。我们如何解决这个问题?图片:i.hizliresim.com/V0Yq3B.png
  • 按钮不能有任何抗锯齿像素,没有办法绕过这个限制。 (其中的任何控件都可以有它们,只要它们不是半透明。) - 如果两个按钮的颜色相同或相似,您可以通过选择类似的 BackColor 使效果 lass 可见,但绿色和黑色太不一样了。
【解决方案2】:

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

请参阅this 帖子以了解锚点与停靠点。

【讨论】:

  • 按钮应该在窗口之外。我添加了更好的图片来解释我想要什么。
猜你喜欢
  • 2012-05-13
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 2013-06-05
  • 2012-05-31
相关资源
最近更新 更多