Cómo hacer que la caída de la lista desplegable ComboBox propio cambio de tamaño para adaptarse a la mayor partida?
-
10-10-2019 - |
Pregunta
Tengo un DataGridView
con un ComboBox
en ella que podrían contener algunas cadenas muy grandes. ¿Hay una manera de tener la lista desplegable expandirse o al menos wordwrap las cuerdas de modo que el usuario puede ver la cadena completa sin tener que cambiar el ancho de columna ComboBox
?
Solución
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;
}
}
Otros consejos
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 combinado cuadro desplegable ancho de la lista de cadena más larga de anchura http://www.codeproject.com/KB/combobox/ComboBoxAutoWidth.aspx
No, que yo sepa, aunque algunos navegadores son lo suficientemente inteligente como para ampliar el ancho del menú más allá de la caja si es necesario hacia abajo. Sé que Firefox y Chrome puede hacerlo si usted es capaz de controlar su base de usuarios un poco.
Si realmente está desesperado ¿qué tal un cuadro combinado basado en flash back datos de contabilización de html?