En ocasiones, trabajando con WinForms, nos encontramos con un control contenedor de un texto variable en el que, o nos sobra espacio o nos falta. La clase Graphics de System.Drawing nos proporciona un método tremendamente útil para saber el tamaño, en píxels, de una cadena de texto.
Veremos a continuación cómo redimensionar de forma dinámica un control dependiendo del tamaño del texto contenido. Para ello crearemos, por ejemplo, un TextBox al que llamaremos txtPrueba, y en el que albergaremos un texto, por ejemplo «Más vale pájaro en mano, que ciento volando».
txtPrueba.Text = "Más vale pájaro en mano que ciento volando";
A continuación, declararemos dos variables enteras, una para el alto y otra para el ancho.
// Declaramos una variable entera para almacenar el nuevo ancho y el nuevo alto int nuevoAncho = 0; int nuevoAlto = 0;
Es ahora donde instanciaremos la clase Graphics a partir del control TextBox, y extraeremos la fuente que está utilizando.
// Creamos un objeto de tipo Graphics a partir del TextBox Graphics g = txt.CreateGraphics(); // Extraemos la fuente del TextBox Font fuente = txt.Font;
Obtenemos, a partir del objeto Graphics, su alto y ancho a partir del método MeasureString, que no hace otra cosa que medir, en pixels, el tamaño que ocupa la cadena con la fuente indicada.
nuevoAncho = (int)g.MeasureString(txt.Text, fuente).Width; nuevoAlto = (int)g.MeasureString(txt.Text, fuente).Height;
Por último, asignamos los nuevos valores de alto y ancho y refrescamos el control.
txt.Width = nuevoAncho; txt.Height = nuevoAlto; txt.Refresh();
A partir de estos conceptos básicos, se pueden encontrar multitud de utilidades a este proceso, como por ejemplo, redimensionar el desplegable de un ComboBox al tamaño del mayor de sus elementos.