2010-05-04 21 views
15

Tengo un panel de salida de tabla. 2x2 - 2 columnas 2 filas.Cambie el tramo de fila/columna mediante programación (tablelayoutpanel)

Por ejemplo, agregué un botón button1 en una fila, una segunda columna. button1 tiene una propiedad Dock configurada en Fill. VS Designer permite configurar las propiedades de columna/fila de button1.

quiero una disponibilidad para cambio de propiedad lapso fila de botón1programáticamente, por lo que puede llenar toda la segunda columna (1 fila y la segunda fila) y la disponibilidad para fijarlo de nuevo.

¿Cómo?

Respuesta

25

¿Qué hay de este código?

private void button1_Click(object sender, EventArgs e) 
{ 
    var control = sender as Control; 

    if(control == null) 
     return; 

    if (1 == tableLayoutPanel1.GetRowSpan(control)) 
    { 
     tableLayoutPanel1.SetRowSpan(control, 2); 
    } 
    else 
    { 
     tableLayoutPanel1.SetRowSpan(control, 1); 
    } 
} 
+1

buen código. Visual Studio Designer me confunde. Estaba buscando en las propiedades del botón 1, estaba tratando de lanzar el botón1 al elemento del panel de herramientas, y así sucesivamente ... ¡gracias! –

+0

si ha buscado en Form.Designer.cs en lugar de diseñador visual, ha encontrado la solución directamente. ;-) – Oliver

+1

Sé que es una publicación anterior, pero me gustaría señalar que no necesita hacer las "condiciones yoda" en C# ya que las declaraciones están fuertemente tipadas. (Y creo que si comete un error con los booleanos y coloca una asignación en lugar de una comparación, genera una advertencia de compilación, a diferencia del error que genera con cualquier otro tipo). – MiffTheFox

2

Aunque considero que la actual respuesta votada es bastante adecuada, también parece un poco más desordenada de lo necesario. Debe agregar los controles al tableLayoutPanel antes de configurar sus propiedades.

Visual Studio (2013 y probablemente otras versiones) mostrará estas propiedades como parte del control. Cuando en realidad, son parte del tableLayoutPanel.

Explicación:

tableLayoutPanel.Controls.Add(**control**, x, y) 
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span') 

Ejemplo:

tableLayoutPanel1.Controls.Add(**button1**, 0, 0); 
tableLayoutPanel1.SetColumnSpan(**button1**, 2); 
tableLayoutPanel1.SetRowSpan(**button1**, 3); 

Resultado: Un botón que 'ocupa' este espacio. (Siempre y cuando sea lo suficientemente grande como para cubrir el área. Incluso si no lo hace 'cobertura' del espacio, seguirá siendo 'reserva' que.)

O O X X X 
O O X X X 
O O X X X 
X X X X X 
X X X X X 

Ajuste del lapso mayor que el tamaño de la cuadrícula. .: NO cambie el tamaño de la cuadrícula. NO recortar/editar el número al tamaño de la cuadrícula. NO arrojar un error al compilar.

ACTUARÁ/funcionará como si el tramo se estableció en la cuadrícula actual (tableLayoutPanel) tamaño máximo. Esto solo es relevante si el tamaño de la cuadrícula/TLP cambia.

Si agrega dos controles dos la misma ubicación de cuadrícula mediante programación, el primer control de una cuadrícula conserva su ubicación. Cualquier control añadido posteriormente se envía al siguiente bloque de celdas. Si se agrega un "intervalo", tratará ese bloque de celda como se usa y continuará buscando un bloque de celda no utilizado.

Ex: label1, label2 y LABEL3 se añaden a 0,0.

  • label1 aparecerá en 0,0
  • label2: 0,1
  • LABEL3: 0,2

Ex 2: etiqueta 1 tiene un período de fila de 2.

  • label1: 0,0
  • label2: trasladado a 0,2
  • LABEL3: 0,3

Después de haber seleccionado el punto de la rejilla correcta y se extiende, a continuación, puede además optimice su diseño utilizando las propiedades de anclaje y muelle.

Cuestiones relacionadas