0

我制作了一个由 9 x 9 个标签组成的网格,每个标签都有一个边框。在一行/列中的每 3 个标签之后,我希望边框比之前的更厚。我找不到添加这种大小的边框的方法。

我在谷歌上搜索,但找不到任何有用的东西。

谁能帮我?

 private void AddNodesToGrid()
{
  pnlGrid.Controls.Clear();
  rooster = new NewLabel[9, 9];
  int Xpos = 0;
  int Ypos = 0;
  for (int I = 0; I < 9; I++)
  {
    for (int T = 0; T < 9; T++)
    {
      rooster[I, T] = new NewLabel(new Node());
      rooster[I, T].Left = Xpos;
      rooster[I, T].Top = Ypos;
      rooster[I, T].Width = 30;
      rooster[I, T].Height = 30;
      rooster[I, T].BorderStyle = BorderStyle.FixedSingle;
      rooster[I, T].TextAlign = ContentAlignment.MiddleCenter;
      pnlGrid.Controls.Add(rooster[I, T]);
      Xpos += 30;
    }
    Xpos = 0;
    Ypos += 30;
  }
}
4

2 回答 2

1

如果是我,我更喜欢自己画桌子。但是如果你需要使用你的标签,我建议你自己画边界:

public class NewLabel : Label
{
    //...

    private int _borderWidth = 1;
    public int BorderWidth
    {
        get { return _borderWidth; }
        set
        {
            _borderWidth = value;
            Invalidate();
        }
    }

    private Color _borderColor = Color.Black;
    public Color BorderColor
    {
        get { return _borderColor; }
        set
        {
            _borderColor = value;
            Invalidate();
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        int xy = 0;
        int width = this.ClientSize.Width;
        int height = this.ClientSize.Height;
        Pen pen = new Pen(_borderColor);
        for (int i = 0; i < _borderWidth; i++)
            e.Graphics.DrawRectangle(pen, xy + i, xy + i, width - (i << 1) - 1, height - (i << 1) - 1);
    }
}

现在您的NewLabel类具有您可以设置BorderWidthBorderColor属性。

(注:我以前画边框的方法是最快的。创建一个需要宽度的笔效果不好,因为GDI+把线的中心放在指定的坐标上。)

于 2013-02-04T18:26:35.957 回答
0

实现此目的的更好方法是使用嵌套的TableLayoutPanel. 从设计师那里创建它并将您的标签放在里面。脚步 :

  • 放置一个 3x3 TableLayoutPanel(父面板)。
  • 在父面板的每个单元格中放置一个 3x3 TableLayoutPanel(子面板)。
  • 为父表和子表设置CellBorderStyleSingle
  • Margin子表设置为0,0,0,0.

你会得到这样的效果:

在此处输入图像描述

于 2013-02-04T17:54:10.863 回答