Pregunta

Tengo una situación (una búsqueda basada en clave) en la que voy a tener múltiples entradas de longitud variable pero limitada. Así que estoy creando un control común para usar para cada entrada, y este control tiene un TextBox para usar cuando el tipo de entrada es texto de forma libre. En ese caso, me gustaría que la longitud del TextBox refleje la restricción colocada en la entrada en función de la propiedad MaxLength del TextBox (o al menos en una longitud máxima de algún tipo).

¿Cómo puedo hacer esto? Me doy cuenta de que esto es técnicamente imposible con los caracteres de ancho variable, pero estoy interesado en acercarme. Los campos varían en longitud máxima de 3 caracteres a alrededor de 90.

¿Fue útil?

Solución 5

Basándome en lo que se ha dicho hasta ahora, creo que la solución ideal en este caso es una combinación de la sugerencia de John y la propuesta de Mitchel y la holgura. Por lo tanto, voy a calcular las longitudes utilizando un carácter estándar (por ejemplo, " C "), y luego establecer el ancho igual a [borde flojo] + ([longitud del carácter] * ([número de caracteres] + [5 - número de caracteres Mod 5])).

Tendré que volver a calcular la longitud del carácter y el ancho del campo cada vez que cambie la fuente.

Otros consejos

Intentaría evitar este enfoque dinámico.
¿De verdad crees que agrega valor para el usuario? En mi opinión, parece extraño, cuando un control común tiene un aspecto diferente todo el tiempo. ¿Crees que el usuario puede diferir entre un cuadro de texto que permite 32 caracteres y otro que permite 29 caracteres? ¿Qué hay de los valores extremos? Cuando, por ejemplo, solo se permiten tres caracteres, o incluso 1024.
Haría el TextBox de la misma longitud, siempre, es mejor para su control y más fácil de implementar. Cuando el usuario necesite una pista sobre la longitud máxima del texto, agregue una etiqueta que diga " 29 caracteres restantes " y que se actualiza durante la entrada ...

Una forma en la que podrías hacer esto, pero no al 100% sería usar el " MeasureString " Método del objeto Graphics, para ver qué tan amplios son los caracteres X, con la fuente que actualmente utiliza el cuadro de texto.

Desde allí, puede calcular el " extra " para cubrir las fronteras, etc. No es una ciencia exacta, pero funcionaría.

Otros pensamientos

La medición de toda la cadena puede ser un poco ineficiente, podrías medir 1 carácter X (que generalmente es más grande que otros) y luego multiplicarlo por todos

Sería más simple, y potencialmente más agradable visualmente, que " chunk " Los tamaños del cuadro de texto. Elija un ancho que funcione para campos de 1-5 caracteres, luego un ancho para 6-10, luego 11-20,20-30,30-50, etc. De esta manera, puede evitar los extraños problemas de alineación visual que podrían ocurrir. si intentó apilar verticalmente campos de 29, 32 y 27 caracteres.

Esto es (casi) imposible con las fuentes de ancho variable.

Supongo que podrías intentar encontrar un personaje relativamente 'ancho', pero eso todavía puede causar problemas.

La solución más fácil probablemente sería encontrar un ancho de caracteres satisfactorio (y probablemente codificar este por tamaño de fuente / familia), y luego multiplicarlo con la longitud máxima.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top