我試圖以編程方式更改TableLayoutPanel
內部表格單元格的背景色。單元格可以是null
,也可以是運行時用戶控件(始終更改)。C#更改TableLayoutPanel中表格單元格的背景顏色
我這樣做:
TableName.GetControlFromPosition(column, row).BackColor = Color.CornflowerBlue;
當然,如果在該單元格的東西這僅適用。我怎樣才能在運行時更改空單元的屬性?
我試圖以編程方式更改TableLayoutPanel
內部表格單元格的背景色。單元格可以是null
,也可以是運行時用戶控件(始終更改)。C#更改TableLayoutPanel中表格單元格的背景顏色
我這樣做:
TableName.GetControlFromPosition(column, row).BackColor = Color.CornflowerBlue;
當然,如果在該單元格的東西這僅適用。我怎樣才能在運行時更改空單元的屬性?
請注意,確實沒有這樣的東西TableLayoutPanelCell
。 '細胞'嚴格爲虛擬。
可以使用CellPaint
事件得出任何BackColor
到任何「細胞」,爲空或不:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (e.Row == e.Column)
using (SolidBrush brush = new SolidBrush(Color.AliceBlue))
e.Graphics.FillRectangle(brush, e.CellBounds);
else
using (SolidBrush brush = new SolidBrush(Color.FromArgb(123, 234, 0)))
e.Graphics.FillRectangle(brush, e.CellBounds);
}
當然顏色和條件是由你..
更新:請再次注意,您無法爲某個「單元格」着色,因爲是否TableLayoutPanelCells
!沒有這樣的班級,既不控制也不控制對象。它只是不存在! TLP是由'細胞'組成的而不是。它僅由行和列組成。
所以要給「單元格」着色,您需要在CellPaint
事件中編寫合適的條件,這是最接近於使用名稱「單元格」的.NET。
根據您的需要,您可以使用簡單的公式或顯式枚舉來創建所需的顏色佈局。
這裏有兩個更詳細的例子:
對於一個簡單的棋盤佈局使用此條件:
if ((e.Row + e.Column) % 2 == 0)
對於自由佈局收集在一個Dictionary<Point>, Color
所有顏色值;
Dictionary<Point, Color> cellcolors = new Dictionary<Point, Color>();
cellcolors.Add(new Point(0, 1), Color.CadetBlue);
cellcolors.Add(new Point(2, 4), Color.Blue);
..
..
..
寫:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (cellcolors.Keys.Contains(new Point(e.Column, e.Row)))
using (SolidBrush brush = new SolidBrush(cellcolors[new Point(e.Column, e.Row)]))
e.Graphics.FillRectangle(brush, e.CellBounds);
else
using (SolidBrush brush = new SolidBrush(defaultColor))
e.Graphics.FillRectangle(brush, e.CellBounds);
}
當單元格爲空時,您無法設置它的BackColor屬性。設置顏色時,應檢查它是否爲空。你可以在單元格中設置控件的顏色,而不是單元格的BackColor。 example
你對我應該怎麼做,然後一個建議?我有64個單元格。我正在考慮製作64塊面板,並在每個單元中放置一塊。然後將用戶控件放在每個面板中。你怎麼看? –
是的,當然你可以得到你想要的,就像你說的那樣。 我照你說的做了。 \t'private void Form1_Load(object sender,EventArgs e) { panel1.BackColor = Color。綠色; panel2.BackColor = Color.Red; panel5.BackColor = Color.Yellow; panel7.BackColor = Color.SeaGreen; }' 你可以設置任何面板的BackColor。 – Gry
如何指定使用此事件着色哪個單元格? 'TableLayoutCellPaintEvenArgs'只有'get'用於'Row'和'Column',所以我不能設置這些值。我有一個二維數組,表示填充1和0(總是變化)的表格。我想爲單元格中存在「1」的單元格着色。現在,無論條件如何,該事件都在繪製整張桌子。 –
爲每個「單元格」和每次刷新調用此事件。因此,要設置某些單元格的顏色,您需要在條件中對其行/列索引進行編碼。根據您的需要,這可以像一個公式一樣簡單,或者像列舉每個單元格一樣繁瑣。看看我的更新了兩個更多的例子! - 你寫道:_現在,事件正在繪製整張桌子,不管情況如何。這肯定是不正確的,或者說:是的,所有'單元格'總是使用這個事件來繪製,但__always根據你寫的條件___。 – TaW
非常感謝!現在一切都說得通了。 –