WinForms中有没有办法从CSS模拟边框折叠?
想象一下:你有一个带有FixedSingle边框的Panel控件,给它一个1px的黑色边框,停靠在表单的顶部。您添加第二个具有相同边框的Panel控件,并且还停靠在顶部,实际上将该Panel放在第一个Panel下面。问题是,顶部面板的底部接触底部面板的顶部,边框现在是2px宽(顶部面板的底部(1px)+底部面板的顶部(1px)= 2px)。
我一直在搞乱Panel控件属性,但是我看不到任何东西让这些触摸边缘重叠,因此面板之间只有1px的边框。有人有什么想法吗?
(我使用的是Visual Basic .NET 2008)
答案 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的哪些边可以获得边框会很方便,但是没有。如果您的目的是创建一个包含很少单元格的网格样式视图,那么您最好自己将数据(以及关联的网格线)绘制到一个面板中。