【问题标题】:"Collapse" Panel Control Borders for WinFormsWinForms 的“折叠”面板控制边框
【发布时间】:2010-10-16 01:54:32
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net winforms


    【解决方案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);
      }
    }
    

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

    【讨论】:

    • 我打算在星期一试试这个。谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2013-11-24
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      相关资源
      最近更新 更多