0

9 x 9 のラベルのグリッドを作成し、各ラベルには境界線があります。行/列の 3 つのラベルごとに、境界線を前のものよりも太くしたい。このサイズの境界線を追加する方法が見つかりません。

Google で検索しましたが、有用なものは見つかりませんでした。

誰でも私を助けることができますか?

 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クラスにBorderWidth設定BorderColor可能なプロパティが追加されました。

(注: 境界線を描画するために使用した方法が最も高速です。GDI+ は指定された座標に線の中心を置くため、必要な幅のペンを作成することはうまくいきません。)

于 2013-02-04T18:26:35.957 に答える
0

これを達成するためのより良い方法は、ネストされた を使用することTableLayoutPanelです。デザイナーから作成し、ラベルを中に配置します。手順 :

  • 3x3 TableLayoutPanel(親パネル) を配置します。
  • 親パネルの各セルに3x3 TableLayoutPanel(子パネル) を配置します。
  • 親テーブルと子テーブルに を設定しCellBorderStyleます。Single
  • Margin子テーブルの を に設定し0,0,0,0ます。

この効果が得られます:

ここに画像の説明を入力

于 2013-02-04T17:54:10.863 に答える