una tamaño net formulario fila fijar encabezado configurar columnas columna color cambiar autosizecolumnsmode asp alto ajustar c# string graphics width

tamaño - ¿Cómo se usa MeasureString en C#para establecer el ancho de la columna de la tabla?



fijar columna gridview asp net (3)

Tengo una pregunta bastante rápida (y espero que sea básica). Estoy modificando algunos códigos C # para el sitio web de mi compañía. El código dibuja una tabla para mí en columnas fijas, cuyos datos se extraen de una base de datos. La altura de cada columna de la tabla es fija (actualmente), y necesito cambiarla, de modo que si la cadena tiene una cierta longitud y, por lo tanto, se ajusta, la segunda línea de texto se puede ver (en lugar de estar oculta en la siguiente fila) .

De mi investigación, parece que puedo usar MeasureString (dado que conozco la fuente y la cadena) para ver si la cadena es más larga / más ancha que mi columna de la tabla establecida, y cambiar la altura de la fila si es así. Sin embargo, soy muy nuevo en la programación C # (y no he hecho mucha programación en general en años, además de cosas web), así que no estoy seguro de cómo implementar todo esto. Tengo la lógica en su lugar, y sé cómo cambiar la altura, solo necesito saber cómo obtener un número real, puedo usar la lógica contra el uso del método MeasureString (y cómo crear una instancia de cualquier variable y función que pueda necesitar usar ese método).


MSDN da un ejemplo donde se calcula registrando un manejador de eventos en el método OnPaint de su control (en controles instanciados), o anulando el método OnPaint (en controles heredados), o anulando el método OnPaint de su formulario (no es el mejor practica ya que probablemente no quieras hacer esto para CUALQUIER forma de repintado). El método OnPaint le dará acceso a un objeto gráfico para que pueda llamar al método MeasureString.

Considera lo siguiente:

public partial class Form1 : Form { public Form1() { InitializeComponent(); label1.Paint += new PaintEventHandler(label1_Paint); } void label1_Paint(object sender, PaintEventArgs e) { SizeF size = e.Graphics.MeasureString(label1.Text, label1.Font); this.label1.Width = (int)size.Width; this.label1.Height = (int)size.Height; } }



Creo que necesitas usar esta sobrecarga para MeasureString(string,font,int) :

El parámetro width especifica el valor máximo del componente ancho de la estructura SizeF devuelta (ancho). Si el parámetro width es menor que el ancho real de la cadena, el componente Width devuelto se trunca a un valor que representa el número máximo de caracteres que cabrán dentro del ancho especificado. Para acomodar toda la cadena, el componente Height devuelto se ajusta a un valor que permite mostrar la cadena con el ajuste de caracteres.

- Desde la página anterior de MSDN vinculada (Énfasis mío)

// Measure string (you''ll need to instansiate your own graphics object, // since you wont have PaintEventArgs) SizeF stringSize = new SizeF(); stringSize = e.Graphics.MeasureString(measureString, stringFont, stringWidth); int cellHeight = stringSize.Height;