プログラム実行中の条件に応じて、TableLayoutPanel
セルの色を設定する関数を作成する必要があります。
TableLayoutPanel
は16x16で除算されます。プログラムの開始時にいくつかの条件があります。セルの条件が真である場合、この販売は青色に塗る必要があります。例えば:
private void start_Click(object sender, EventArgs e)
{
foreach (string str in some_list)
{
if (some condition)
{
set_color_in_cell at row[i] colum[j] //(what shoud i use here?)
}
}
}
私はそのような例を見つけました:
private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (e.Row == 0 && e.Column == 1)
{
e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.CellBounds);
}
}
でも使い方がわかりません。誰かがこれについて知っているなら、私を助けてください。
private void start_Click(object sender, EventArgs e)
{
string SyncAnswer = "";
foreach (string file_string in Data_from_file)
{
COM_Port.WriteLine(file_string);
while (SyncAnswer != "READY")
{
SyncAnswer = COM_Port.ReadLine();
if (SyncAnswer.Substring(0, 4) == "Fire")
{
//raise event
//Paint for example a cell in Row=i Colum=j
}
else if (SyncAnswer.Substring(0, 4) == "Skip")
{
//raise event
}
}
}
}
ステップバイステップの例を次に示します。
Form
を作成しますTableLayoutPanel
をForm
に配置しますtableLayoutPanel1
を選択し、を押します F4 プロパティを表示するためのキー。CellPaint
eventをダブルクリックして、コードにtableLayoutPanel1_CellPaint
イベントハンドラーを作成します。e.Row
は行インデックス、e.Column
は列インデックス、e.CellBounds
はペイントセルのバインドです。たとえば、以下のサンプルでは、黒い背景if ((e.Column + e.Row) % 2 == 1)
を描画します。それ以外の場合は、白い背景を描画します。
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if ((e.Column + e.Row) % 2 == 1)
e.Graphics.FillRectangle(Brushes.Black, e.CellBounds);
else
e.Graphics.FillRectangle(Brushes.White, e.CellBounds);
}
色を動的に変更するには
プログラムの別のポイントから色を変更するには、たとえばボタンのClick
イベントで、各セルの色を2次元配列に格納し、その色を使用してそのセルのブラシを作成する必要があります。
フォームでbgColors
を定義します。
Color[,] bgColors = new Color[2, 2] {
{ SystemColors.Control, SystemColors.Control },
{ SystemColors.Control, SystemColors.Control }
};
この方法でセルの背景を描画します。
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
using (var b = new SolidBrush(bgColors[e.Column, e.Row]))
{
e.Graphics.FillRectangle(b , e.CellBounds);
}
}
BackColor
のCell
を変更するには、次のことができます。
private void Button1_Click(object sender, EventArgs e)
{
//column: 0 ,row: 1
bgColors[0, 1] = Color.Red;
tableLayoutPanel1.Refresh();
}
別の簡単なオプションとして、各セルにPanel
を配置し、Dock
のPanel
プロパティをFill
に設定し、そのMargin
プロパティを0,0
に設定すると、位置(column, row)
でパネルの色を変更するたびに次のことができます。
this.tableLayoutPanel1.GetControlFromPosition(column, row).BackColor = Color.Red;