2

現在、複数の行と列を持つTableLayoutPanelがあります。これは、SQLクエリの出力に応じて実行されるたびに異なるforループによって生成されます。

void tblTableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
    {
        if (e.Row == 2 || e.Row == 4)
        {
            Graphics g = e.Graphics;
            Rectangle r = e.CellBounds;
            g.FillRectangle(Brushes.Red, r);
        }
    }

これは私が現在個々の行に色を付けるために持っているコードですが、2つの変数(JとK)に応じて個々のセルに色を付けることができるようにしたいと思います。

                TableLayoutPanel.Controls.Add(label, J, K);

同様に、JとKを使用してTableLayoutPanelのセルにラベルを追加した方法のサンプルを次に示します。CellPaintメソッドをオーバーロードして、JとKを使用できるようにすることはできますか?または、そうであれば、実行時にセルの色を変更するにはどうすればよいですか?

私は以前にこの質問をし、次の解決策を得ました。

CellPaintはイベントであり、メソッドではありません。カラーブラシを返すメソッドGetColor(int row、int column)を作成してから、CellPaintイベントでe.Rowとe.Columnを使用してメソッドを呼び出すことをお勧めします。

使用している変数がメインプログラムにあるため、これがどのように機能するか完全にはわかりません。次に、これらをメソッドの変数と比較する必要がありますか?または、比較する場所に設定してから、イベントを実行します。誰かが私のためにこれをもう少し明確に説明できますか?または多分私に例を教えてください?ありがとう。

4

2 に答える 2

2

次に例を示します。

void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
    Graphics g = e.Graphics;
    Rectangle r = e.CellBounds;
    g.FillRectangle(GetBrushFor(e.Row, e.Column), r);
}

private Brush GetBrushFor(int row, int column)
{
    if (row == 2 && column == 1)
        return Brushes.Red;

    // other logic
    // ...
    // return default Brush
}

備考-ビジネスロジックではなく、行と列のインデックスのみに基づいて色を割り当てたいのは奇妙に見えます(つまり、セルに表示されるデータに依存します)。

于 2013-02-14T14:37:43.773 に答える
0

考えられる解決策の1つは、jとkをControl.Tagに保存することです。たとえば、オブジェクトの配列として、セルのペイティング中に、このセルにあるものをコントロールからjとkに戻します。

于 2013-02-14T14:43:30.773 に答える