WinForms的“折叠”面板控件边框

时间:2009-03-28 03:03:35

标签: .net winforms

WinForms中有没有办法从CSS模拟边框折叠?

想象一下:你有一个带有FixedSingle边框的Panel控件,给它一个1px的黑色边框,停靠在表单的顶部。您添加第二个具有相同边框的Panel控件,并且还停靠在顶部,实际上将该Panel放在第一个Panel下面。问题是,顶部面板的底部接触底部面板的顶部,边框现在是2px宽(顶部面板的底部(1px)+底部面板的顶部(1px)= 2px)。

我一直在搞乱Panel控件属性,但是我看不到任何东西让这些触摸边缘重叠,因此面板之间只有1px的边框。有人有什么想法吗?

(我使用的是Visual Basic .NET 2008)

2 个答案:

答案 0 :(得分:1)

只需创建自己的面板派生控件。通过按照您想要的方式绘制边框来伪造边框。例如:

using System;
using System.Drawing;
using System.Windows.Forms;

public class MyPanel : Panel {
  public MyPanel() {
    this.Dock = DockStyle.Top;
    this.DoubleBuffered = true;
    this.SetStyle(ControlStyles.ResizeRedraw, true);
  }
  protected override void OnPaintBackground(PaintEventArgs e) {
    base.OnPaintBackground(e);
    int y = this.ClientSize.Height - 1;
    int x = this.ClientSize.Width-1;
    e.Graphics.DrawLine(Pens.Black, 0, 0, 0, y);
    e.Graphics.DrawLine(Pens.Black, 0, y, x, y);
    e.Graphics.DrawLine(Pens.Black, x, 0, x, y);
  }
}

在项目中添加一个新类并粘贴上面显示的代码。编译。将新控件从工具箱顶部拖放到表单上。

答案 1 :(得分:0)

与大多数内置控件一样,Panel的border属性是一种全有或全无的属性。指定Panel的哪些边可以获得边框会很方便,但是没有。如果您的目的是创建一个包含很少单元格的网格样式视图,那么您最好自己将数据(以及关联的网格线)绘制到一个面板中。