winforms C#如何改变窗体边框颜色?

zmeyuzjn  于 2022-11-17  发布在  C#
关注(0)|答案(7)|浏览(665)

我想改变窗体边框的颜色(窗体标题的边框)。我在codeplex中找到的例子太多了,让人困惑。有什么能帮我做一些简单的事情吗?

dm7nw8vv

dm7nw8vv1#

使用以下内容覆盖它:

protected override void OnPaint(PaintEventArgs e)
{
    ControlPaint.DrawBorder(e.Graphics, ClientRectangle, Color.[your_color], ButtonBorderStyle.Solid);
}
3z6pesqy

3z6pesqy2#

不幸的是,由于窗体边框是由操作系统绘制的,所以这是一个复杂的任务。
不要单击下面CodePlex页上的ProjectDistributor链接
CodePlex Project for Drawing Custom Borders使这一点变得非常容易,只要使用该项目中的SkinnedForm而不是标准Form来构建窗体,它就应该可以工作--您真的不需要在代码中做任何不同的事情。

brqmpdu1

brqmpdu13#

解决方法-只需执行以下步骤:

  • FormBorderStyle设定为None
  • 用一个面板盖住表格,并留出一些空间作为边框。
  • 将边框的颜色设置为窗体背景色。

现在,面板充当主容器,您可以根据需要更改背景,窗体充当边框。

最终结果

eivnm1vs

eivnm1vs4#

这对我在Windows 10和11中有效:

private string ToBgr(Color c) => $"{c.B:X2}{c.G:X2}{c.R:X2}";

    [DllImport("DwmApi")]
    private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);

    const int DWWMA_CAPTION_COLOR = 35;
    const int DWWMA_BORDER_COLOR = 34;
    const int DWMWA_TEXT_COLOR = 36;
    public void CustomWindow(Color captionColor, Color fontColor, Color borderColor, IntPtr handle)
    {
        IntPtr hWnd = handle;
        //Change caption color
        int[] caption = new int[] { int.Parse(ToBgr(captionColor), System.Globalization.NumberStyles.HexNumber) };
        DwmSetWindowAttribute(hWnd, DWWMA_CAPTION_COLOR, caption, 4);
        //Change font color
        int[] font = new int[] { int.Parse(ToBgr(fontColor), System.Globalization.NumberStyles.HexNumber) };
        DwmSetWindowAttribute(hWnd, DWMWA_TEXT_COLOR, font, 4);
        //Change border color
        int[] border = new int[] { int.Parse(ToBgr(borderColor), System.Globalization.NumberStyles.HexNumber) };
        DwmSetWindowAttribute(hWnd, DWWMA_BORDER_COLOR, border, 4);

    }

示例:

CustomWindow(Color.Red, Color.Blue, Color.Green, Handle);
6psbrbz9

6psbrbz95#

就像前面提到的,改变边框的实际颜色是很困难的。上面的面板解决方案有一些限制,比如你不能调整窗体的大小。我找到了一个相当简单的技巧,没有很多其他的限制。

  • 建立表单
  • 将窗体边框样式设置为“无”
  • 添加4个面板
  • 将面板的背景颜色设置为所需的边框颜色
  • 在顶部、底部、左侧和右侧各锚一个
  • 将高度(上/下)或宽度(左/右)设置为你想要的边框的粗细。2或3看起来真的很不错。

它看起来像框缐,会随着视窗调整大小,而且您可以将任何其他项目拖曳到您想要的表单中。限制是,您必须在新增到表单的第一件事中执行此动作。

omjgkv6w

omjgkv6w6#

在“ForeColor”下面,应该是一个名为“FormBorderStyle”的设置。您可以在VisualStudio 2015中使用该设置进行编辑。或者,您可以进入控制面板路径,应该是这样的“Control Panel\Appearance and Personalization\Personalization”,它们将是另一个名为“Color”的设置。可以更改为你想要的颜色,它会将所有程序中的边框颜色更改为你设置的颜色。

w9apscun

w9apscun7#

if (colorDialog1.ShowDialog() == DialogResult.OK)
{
    string color = Convert.ToString(colorDialog1.Color);
    MessageBox.Show("You change the color " + color);
    this.BackColor = colorDialog1.Color; // BackColor is only accessible for this form
}

相关问题