代码之家  ›  专栏  ›  技术社区  ›  HardCode

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

  •  1
  • HardCode  · 技术社区  · 17 年前

    WinForms中有没有办法模拟CSS中的边界折叠?

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

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

    (我正在使用Visual Basic.NET 2008)

    2 回复  |  直到 17 年前
        1
  •  1
  •   Hans Passant    17 年前

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

    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
  •  0
  •   Jim H.    17 年前

    推荐文章