2009-06-11 8 views
5

Encuentro que el panel de diseño de tabla en C# (.net 2.0) es muy primitivo. Quería permitir a mis usuarios cambiar el tamaño de las columnas en un panel de diseño de tabla, pero no hay opciones listas para hacerlo. ¿Hay alguna forma al menos de averiguar si el cursor está directamente sobre los bordes de una celda y, de ser así, qué celda hay debajo? Puede estar teniendo esta información, al menos podemos tratar de cambiar el tamaño de esa fila/columna a través de código. Ayúdame a encontrar,Panel de diseño de tabla redimensionable en C#

  • si el cursor se encuentra directamente sobre los bordes de una celda
  • qué celda está debajo de ella (aplicable sólo si la primera pregunta tiene una respuesta)

Muchas gracias,

Sudarsan Srinivasan

+0

hey sudarsanyes ¿Alguna vez resolvió este problema? Ahora estoy enfrentando el mismo problema. el usuario de mi aplicación necesita poder cambiar el tamaño de las filas y columnas en la tabla tableLayoutPanel de mi aplicación durante el tiempo de ejecución –

Respuesta

7

Si el diseño es no excesivamente compleja, tal vez se puede lograr lo que quiere mediante el uso de controles SplitContainer? Por desgracia, cada SplitContainer tendrá sólo dos "células", pero se puede incrustar un SplitContainer en otro panel SplitContiner para obtener más células de tamaño variable:

┌──────────────────┐ 
│┌─────┬──────────┐│ 
││  │   ││ 
││  │   ││ 
│└─────┴──────────┘│ 
├──────────────────┤ 
│┌──────────┬─────┐│ 
││   │  ││ 
││   │  ││ 
│└──────────┴─────┘│ 
└──────────────────┘ 

OK, entonces el arte ASCII nunca fue una de mis habilidades más fuertes, pero Creo que se obtiene el punto; o)

+0

¿No será muy complejo y costoso? [eres muy bueno en artes ASCII que yo: D] – sudarsanyes

+0

Feo, sí, pero considerablemente menos complejo y costoso que tratar de manejar eventos en un panel de diseño de tabla, diría yo. – Benjol

+0

Esta es la solución alternativa que uso, pero no creo que haya una forma (simple) de hacer cumplir la vista tabular, porque en el momento que el usuario cambia el tamaño de un contenedor dividido interno, no está sincronizado con los otros contenedores divididos en tu mesa. Tal vez con controladores de eventos de codificación. – tsemer

0

Basándose en la cima de @Fredrik Mörk's solution:

Después de incrustar otra SplitContainer (s), el único inconveniente es que no cambian de tamaño automáticamente de forma coordinada, por lo que pierden rápidamente la vista tabular . Una solución podría ser la creación de un manejador de eventos para cada SplitterMoved SplitContainer aplicable:

private void mySplitContainer_SplitterMoved(object sender, SplitterEventArgs e) { 
    mOtherySplitContainer.SplitterDistance = e.SplitX; 
} 

Si su uso es SplitContainer horizontal e.SplitX, si es vertical, el uso e.SplitY.

Cuestiones relacionadas