0

次のように定義/構築されたTableLayoutPanelを拡張するクラスがあります。

public class MyTableLayout : TableLayoutPanel
{
    public MyTableLayout()
    {
        this.ColumnCount = 5;
        this.RowCount = 1;
        this.CellBorderStyle = TableLayoutPanelCellBorderStyle.Outset;
    }
}

私のテーブルが描画されると、5つの列すべての周りに境界線が表示されます(上記のCellBorderStyleを設定するコードを指定すると予想されます)。

最初の列の周りに境界線が描画されないようにする方法はありますか?

CellPaintコールバックを追加できることは知っています。

this.CellPaint += tableLayoutPanel_CellPaint;

このコールバックでは、特定の列の境界線の色を変更するなどの操作を実行できます。

private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
    if (e.Column == 0 && e.Row == 0)
    {
        e.Graphics.DrawRectangle(new Pen(Color.Red), e.CellBounds);
    }
}

しかし、どのようにして「いいえ」の長方形を描くのでしょうか。

色をColor.Emptyに設定しようとしましたが、うまくいきませんでした。

e.Graphics.DrawRectangle(new Pen(Color.Empty), e.CellBounds);
4

2 に答える 2

2

セルの境界線の描画は、OnPaintBackgroundオーバーライドのTableLayoutPanelによって実行されます。

境界線の描画方法を変更するには、境界線を設定せず(したがって、基本クラスは何も描画しない)、OnPaintBackgroundの独自のオーバーライドで他のすべての境界線をペイントする必要があります。

TableLayoutPanelは、内部関数ControlPaint.PaintTableCellBorderを使用して境界線の描画を実行します。使用できないため、ソースコード(ReflectorまたはILSpyを使用)を調べて、どのように実行されたかを確認する必要があります。

于 2012-08-23T22:55:16.933 に答える
1

逆に試してください。境界線を設定するセルの周囲にのみ境界線を描画します。

private void tableLayoutPanel_CellPaint(object sender, 
                                        TableLayoutCellPaintEventArgs e) {
  if (e.Column > 0 && e.Row == 0) {
    e.Graphics.DrawRectangle(new Pen(Color.Red), e.CellBounds);
  }
}

明らかに、絵が仕事を引き継ぐことができるように、境界線をなしに戻します。

this.CellBorderStyle = TableLayoutPanelCellBorderStyle.None;
于 2012-08-23T22:46:16.570 に答える