如何获得 C# Windows 窗体面板绘制边框的正确边界

发布于 2024-12-09 16:33:56 字数 569 浏览 1 评论 0原文

所以我试图为面板绘制底部边框。我有这样的代码:

private void pnl_Paint(object sender, PaintEventArgs e)
{
    ControlPaint.DrawBorder(e.Graphics, ((Panel)sender).ClientRectangle, Color.Transparent, 0, ButtonBorderStyle.None, Color.Transparent, 0, ButtonBorderStyle.None, Color.Transparent, 0, ButtonBorderStyle.None, SystemColors.ControlDarkDark, 1, ButtonBorderStyle.Solid);
}

我还用 DisplayRectangle 和 Bounds 替换了 ClientRectange,它们都产生相同的结果,如图所示。

我试图实现一个底部边框一直穿过桃色背景(用于显示面板的大小)

screenshot

So I am trying to draw a bottom border for a panel. I have this code:

private void pnl_Paint(object sender, PaintEventArgs e)
{
    ControlPaint.DrawBorder(e.Graphics, ((Panel)sender).ClientRectangle, Color.Transparent, 0, ButtonBorderStyle.None, Color.Transparent, 0, ButtonBorderStyle.None, Color.Transparent, 0, ButtonBorderStyle.None, SystemColors.ControlDarkDark, 1, ButtonBorderStyle.Solid);
}

I have also replaced ClientRectange with DisplayRectangle and Bounds, and all of them produce the same result, the one in the picture.

I am trying to achieve a bottom border going all the way across the peach background (used to display the size of the panel)

screenshot

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浪荡不羁 2024-12-16 16:33:56

将 Padding 属性更改为以下内容:

pnl.Padding = new Padding(0, 0, 0, 1);

由于您只是想画一条线,所以画一条线:

private void pnl_Paint(object sender, PaintEventArgs e) {
  e.Graphics.DrawLine(Pens.Black, new Point(0, pnl.ClientSize.Height - 1), new Point(pnl.ClientSize.Width, pnl.ClientSize.Height - 1));
}

并确保在调整大小时无效:

private void pnl_Resize(object sender, EventArgs e) {
  pnl.Invalidate();
}

Change your Padding property to the following:

pnl.Padding = new Padding(0, 0, 0, 1);

Since you are just trying to draw a line, draw a line:

private void pnl_Paint(object sender, PaintEventArgs e) {
  e.Graphics.DrawLine(Pens.Black, new Point(0, pnl.ClientSize.Height - 1), new Point(pnl.ClientSize.Width, pnl.ClientSize.Height - 1));
}

And make sure to invalidate on the resize:

private void pnl_Resize(object sender, EventArgs e) {
  pnl.Invalidate();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文