Beachten Sie, dass es wirklich keine solche Sache gibt TableLayoutPanelCell
. Die "Zellen" sind streng virtuell.
Sie verwenden, um die CellPaint
Ereignis jede BackColor
auf jede ‚Zelle‘ zu ziehen, leer oder nicht:
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);
}
![enter image description here](https://i.stack.imgur.com/8Hu6Z.png)
Natürlich sind die Farben und die Bedingungen sind bis zu Ihnen ..
Update: Beachten Sie noch einmal, dass Sie eine bestimmte "Zelle" nicht färben können, da keinesind! Keine solche Klasse, weder Kontrollen noch Objekte. Es existiert einfach nicht! Ein TLP ist nicht bestehend aus "Zellen". Es besteht nur aus Zeilen und Spalten.
Um eine 'Zelle' zu färben, müssen Sie eine geeignete Bedingung im CellPaint
Ereignis kodieren, das ist das nächste .NET kommt zur Verwendung des Namens 'Zelle'.
Sie können einfache Formeln oder explizite Aufzählungen verwenden, um das gewünschte Farblayout je nach Ihren Anforderungen zu erstellen.
Hier sind zwei aufwändigere Beispiele:
Für ein einfaches Schachbrett Layouts verwenden diese Bedingung:
if ((e.Row + e.Column) % 2 == 0)
Für ein Freiform Layouts sammeln alle Farbwerte in einem 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);
..
..
..
und schreiben:
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);
}
Wie kann ich angeben, welche Zelle mit diesem Ereignis eingefärbt werden soll? 'TableLayoutCellPaintEvenArgs' hat nur' Get' für die 'Row' und' Column', also kann ich diese Werte nicht setzen. Ich habe ein 2D-Array, das die Tabelle darstellt, die mit 1 und 0 (immer ändernden) gefüllt ist. Ich möchte die Zellen färben, wo eine "1" im Array ist. Gerade jetzt malt das Event den ganzen Tisch, egal wie der Zustand ist. –
Dieses Ereignis wird für jede 'Zelle' und bei jeder Aktualisierung aufgerufen. Um die Farben bestimmter Zellen festzulegen, müssen Sie ihre Zeilen-/Spaltenindizes in den Bedingungen codieren. Abhängig von Ihren Bedürfnissen kann dies so einfach wie eine Formel oder so langweilig wie das Aufzählen jeder Zelle sein. Sehen Sie mein Update für zwei weitere Beispiele! - Du hast geschrieben: _Richtig, das Ereignis malt die ganze Tabelle, egal wie die Bedingung ist. Das ist sicherlich nicht wahr, oder besser: Ja, alle 'Zellen' werden immer mit diesem Ereignis bemalt, aber immer entsprechend der Bedingung, die du schreibst__. – TaW
Vielen Dank! Es macht jetzt alles Sinn. –