Tengo un DataGridView
con un ComboBox
que puede contener algunas cadenas bastante grandes. ¿Hay alguna manera de expandir la lista desplegable o al menos ajustar las cadenas para que el usuario pueda ver toda la cadena sin tener que cambiar el tamaño del ancho de la columna ComboBox
?¿Cómo hacer que la lista desplegable de ComboBox se redimensione para ajustarse al elemento más grande?
Respuesta
Esto es lo que hice para solucionar esto, funciona muy bien ...
public class ImprovedComboBox : ComboBox
{
public ImprovedComboBox()
{
}
public object DataSource
{
get { return base.DataSource; }
set { base.DataSource = value; DetermineDropDownWidth(); }
}
public string DisplayMember
{
get { return base.DisplayMember; }
set { base.DisplayMember = value; DetermineDropDownWidth(); }
}
public string ValueMember
{
get { return base.ValueMember; }
set { base.ValueMember = value; DetermineDropDownWidth(); }
}
private void DetermineDropDownWidth()
{
int widestStringInPixels = 0;
foreach (Object o in Items)
{
string toCheck;
PropertyInfo pinfo;
Type objectType = o.GetType();
if (this.DisplayMember.CompareTo("") == 0)
{
toCheck = o.ToString();
}
else
{
pinfo = objectType.GetProperty(this.DisplayMember);
toCheck = pinfo.GetValue(o, null).ToString();
}
if (TextRenderer.MeasureText(toCheck, this.Font).Width > widestStringInPixels)
widestStringInPixels = TextRenderer.MeasureText(toCheck, this.Font).Width;
}
this.DropDownWidth = widestStringInPixels + 15;
}
}
No lo sé, aunque algunos navegadores son lo suficientemente inteligentes como para ampliar el ancho del menú desplegable más allá del cuadro si es necesario. Sé que Firefox y Chrome pueden hacerlo si puedes controlar un poco tu base de usuarios.
Si realmente está desesperado ¿qué tal un cuadro combinado basado en flash que devuelve datos a html?
Estaba buscando una respuesta de winforms. Debo agregar winforms a la pregunta. Perdón por la confusion. –
La mayoría de los navegadores hacen esto automáticamente de todos modos ... – Nyerguds
Esta es una solución muy elegante:
private void AdjustWidthComboBox_DropDown(object sender, System.EventArgs e)
{
ComboBox senderComboBox = (ComboBox)sender;
int width = senderComboBox.DropDownWidth;
Graphics g = senderComboBox.CreateGraphics();
Font font = senderComboBox.Font;
int vertScrollBarWidth =
(senderComboBox.Items.Count>senderComboBox.MaxDropDownItems)
?SystemInformation.VerticalScrollBarWidth:0;
int newWidth;
foreach (string s in ((ComboBox)sender).Items)
{
newWidth = (int) g.MeasureString(s, font).Width
+ vertScrollBarWidth;
if (width < newWidth)
{
width = newWidth;
}
}
senderComboBox.DropDownWidth = width;
}
Ajuste cuadro combinado desplegable ancho de la lista de ancho de cadena más largahttp://www.codeproject.com/KB/combobox/ComboBoxAutoWidth.aspx
- 1. ¿Cómo configuro el ancho de QComboBox para que se ajuste al elemento más grande?
- 2. cómo hacer la devolución de datos al cambiar la lista desplegable elemento seleccionado en mvc4
- 3. plantilla diferente para los elementos de la lista desplegable del cuadro combinado y de elemento seleccionado
- 4. Extjs combobox: ocultar el valor seleccionado de la lista desplegable
- 5. ¿Cómo mostrar un valor diferente para los valores de la lista desplegable/elemento seleccionado en un WPF ComboBox?
- 6. Java Swing: ¿Cómo hacer que la lista desplegable JComboxBox sea más alta?
- 7. Cómo hacer que la declaración if grande sea más legible
- 8. ComboBox editable con enlace al valor no en la lista
- 9. Cómo hacer que un C++ EXE sea más grande (artificialmente)
- 10. ExtJS ComboBox ancho desplegable más ancho que el ancho del cuadro de entrada?
- 11. MVC3 Lista desplegable que no selecciona el elemento seleccionado
- 12. Cómo reemplazar la lista desplegable MultiAutoCompleteTextView
- 13. jQuery añadir opción en blanco al principio de la lista y hacer seleccionada para desplegable
- 14. Hacer un elemento de la lista que se puede hacer clic (HTML/CSS)
- 15. ¿Cómo puedo garantizar que un DIV se extienda para ajustarse a su contenido?
- 16. Para hallar más grande elemento más pequeño que K en un BST
- 17. Imagen más grande para el primer elemento de gridview android
- 18. Cómo tener lista desplegable de JComboBox que es más ancha que JComboBox en sí
- 19. superposición de filas de GridView: cómo hacer que la altura de fila se ajuste al elemento más alto?
- 20. ¿Cómo hacer que una lista desplegable se deshabilite en el evento de cambio con JQUERY?
- 21. asp.net: ¿Cómo puedo eliminar un elemento de una lista desplegable?
- 22. Validador para la lista desplegable en asp.net
- 23. La lista desplegable ampliable de Android oculta los elementos si la lista es demasiado grande
- 24. Error en la lista desplegable
- 25. ¿Cómo hacer que el elemento de la lista se estire horizontalmente?
- 26. ¿Cómo hacer que div se fije en altura pero crece si el contenido es más grande que la altura?
- 27. ¿Cómo puedo evitar que Emacs redimensione mis ventanas?
- 28. Android Spinner: cómo hacer que la vista desplegable sea transparente?
- 29. Elemento Listbox que se extiende al ancho del listbox PERO no más allá del ancho
- 30. Propietario de tamaño variable dibujar ComboBox; lista no dimensionar correctamente
Gracias. Elegí modificar la propiedad DropDownWidth en el evento DropDown. –
Podría ser una mejor idea suscribirse para los eventos 'DataSourceChanged',' ValueMemberChanged' y 'DisplayMemberChanged' en lugar de ocultar la propiedad. –
Como es una anulación de clase, la manera más limpia es simplemente agregar una anulación para 'OnDropDown' para agregar la llamada allí antes de ejecutar' base.OnDropDown (e) '. Y por cierto, para esa comprobación final de 'if>', simplemente almacene ese ancho en una variable en lugar de llamar ese cálculo dos veces. – Nyerguds