2010-01-09 15 views

Antwort

21

Ja, Sie können.

Verwenden Sie das CellPaint-Ereignis von TableLayoutPanel, um zu testen, welche Zeile/Spalte das Ereignis aufgerufen hat, und verwenden Sie dann eine Grafikobjektgröße für das Rechteck, um die Farbe der Zelle festzulegen.

wie folgt aus (in den ersten und dritten Reihe):

 private void Form_Load(object sender, EventArgs e) { 
     this.tableLayoutPanel1.CellPaint += new TableLayoutCellPaintEventHandler(tableLayoutPanel1_CellPaint); 
    } 


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

Sie wollen sicherstellen, dass Sie die Bürste entsorgen. Wickeln Sie seine Erstellung in eine using() {} -Anweisung oder verwenden Sie das statische Brushes.Blue. Andernfalls verlieren Sie Speicher auf jeder Farbe. – Eilon

+0

danke für die Erinnerung, Eilon - und Erwähnung der Option, die statische Bürsten zu verwenden. –

+0

'Brushes.Blue' ist eine statische Eigenschaft, also würde ich sie nicht entsorgen, sonst könnte sie beim nächsten Mal ungültig werden. –

5

fand ich diese Antwort viel einfacher zu implementieren:

Das erlaubte mir, eine vollständige Hintergrundfarbe auf meine Zelle zu setzen.

  1. erstellen Panel, die eine Hintergrundfarbe hat, und
  2. ich Dock dass Panel in meinem TableLayoutPanel

Dann, dass TableLayoutPanel Zelle eine Hintergrundfarbe hat.

My-Code am Ende wie folgt aussehen:

Panel backgroundColorPanel = new Panel(); 
backgroundColorPanel.BackColor = Color.FromArgb(243, 243, 243); 
backgroundColorPanel.Dock = DockStyle.Fill; 
backgroundColorPanel.Margin = new Padding(0); 
backgroundColorPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)); 
backgroundColorPanel.AutoSize = true; 
backgroundColorPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 
this.originalTableLayoutPanel.Controls.Add(backgroundColorPanel, 0, row); 

http://www.codeguru.com/forum/showthread.php?t=444944

+1

Dies funktioniert, ist aber nicht sehr effizient hinsichtlich der erforderlichen Codezeilen, Speicherauslastung oder Prozessorzyklen. –

Verwandte Themen