2011-06-04 68 views
16

No pregunte por qué, pero tengo el requisito de dibujar un borde alrededor de ciertas celdas en un TableLayoutPanel.Dibuje los bordes alrededor de algunas celdas en un panel de tablelayout

Por ejemplo, para simplificar, digamos que tengo 1 fila, 5 columna TableLayoutPanel. Cada celda tiene un botón. Me gustaría dibujar un cuadro alrededor de las 3 primeras celdas y luego otra caja alrededor de las 2 últimas celdas. Así que dos cajas en total.

¿Alguna sugerencia sobre cómo lograr eso?

Gracias.

+0

¿Por qué? ....... :) – Nick

Respuesta

26

Usted podría utilizar CellPaint evento y dibujar el rectángulo de borde cuando sea necesario:

tableLayoutPanel1.CellPaint += tableLayoutPanel1_CellPaint; 

El manejador:

void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e) 
{ 
    if (e.Column == 1 && e.Row == 0) 
     e.Graphics.DrawRectangle(new Pen(Color.Blue), e.CellBounds); 
} 

Usted puede dibujar cualquier tipo de frontera utilizando ControlPaint:

if (e.Column == 1 && e.Row == 0) 
{ 
    var rectangle = e.CellBounds; 
    rectangle.Inflate(-1, -1); 

    ControlPaint.DrawBorder3D(e.Graphics, rectangle, Border3DStyle.Raised, Border3DSide.All); // 3D border 
    ControlPaint.DrawBorder(e.Graphics, rectangle, Color.Red, ButtonBorderStyle.Dotted); // dotted border 
} 
+0

¡Justo lo que necesitaba! ¡Aclamaciones! –

+2

¿Puedo usarlo limitado a un método? Por ejemplo, definiré un método como PaintDesiredCell (int columnOrder, int rowOrder) {// codes}? ¿Es posible? –

+0

Me gusta usar esto cuando se depura. Al utilizar dot net con IronPython, no tengo un constructor de GUI, por lo que poder ver la cuadrícula ayuda mucho cuando trato de encontrar errores. Utilizo un conmutador de depuración para determinar si conecto el controlador de evento de pintura de celda. –

3

Propiedades de acceso para tableLayoutPanel y Set t el estilo CellBorder a Single

Cuestiones relacionadas