Mam plik DataGridView
z plikiem ComboBox
, który może zawierać dość duże ciągi. Czy istnieje sposób, aby lista rozwijana się rozszerzyła lub przynajmniej rozpakowała ciągi znaków, aby użytkownik mógł zobaczyć cały ciąg bez konieczności zmieniania szerokości kolumny ComboBox
?Jak zmienić listę rozwijaną ComboBox, aby pasowała do największej pozycji?
Odpowiedz
Oto co zrobiłem, aby rozwiązać ten problem, działa świetnie ...
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;
}
}
Nie to, co wiem, chociaż niektóre przeglądarki są wystarczająco inteligentne, aby zwiększyć szerokość menu rozwijanego poza pole, jeśli jest ono potrzebne. Wiem, że Firefox i Chrome mogą to zrobić, jeśli możesz trochę kontrolować swoją bazę użytkowników.
Jeśli naprawdę jesteś zrozpaczony, to jak w polu kombi opartym na pamięci flash, wysyłając dane z powrotem do html?
Szukał odpowiedzi na pytanie o wygraną. Powinienem dodać winFormy do pytania. Przepraszam za zamieszanie. –
Większość przeglądarek robi to automatycznie i tak ... – Nyerguds
Jest to bardzo eleganckie rozwiązanie:
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;
}
Ustaw pole kombi rozwijanej listy szerokość do szerokości najdłuższy łańcuchhttp://www.codeproject.com/KB/combobox/ComboBoxAutoWidth.aspx
- 1. Jak wymusić WPF ComboBox, aby wyświetlić listę elementów?
- 2. Jak utworzyć listę rozwijaną?
- 3. Jak uzyskać listę rozwijaną, aby opublikować formularz w MVC
- 4. Java Swing: Jak zwiększyć listę rozwijaną JComboxBox?
- 5. Jak stylować listę rozwijaną autouzupełniania
- 6. Jak ustawić listę rozwijaną do wielu wartości?
- 7. PyQt: Jak ustawić Combobox do pozycji znającej tekst pozycji (tytuł)?
- 8. datepicker jquery: Konwertuj listę rozwijaną do ul
- 9. ASP.NET MVC - zapełnij listę rozwijaną
- 10. Wyczyść listę rozwijaną z JQuery
- 11. Jak ustawić listę rozwijaną jako wybraną w ASP.NET?
- 12. Jak utworzyć edytowalną listę rozwijaną w HTML?
- 13. Jak wygenerować listę rozwijaną w asp.net Maszynka do golenia MVC
- 14. jak zmienić wysokość rozwijaną w turbinki
- 15. Jak zmienić link href z wartością rozwijaną
- 16. Jak zmienić rozmiar listy rozwijanej combobox?
- 17. Jak włączyć listę rozwijaną z góry ustalonych elementów, aby dodać ją do formantu niestandardowego w SceneBuilder?
- 18. Czy można utworzyć rozwijaną listę AlertDialog?
- 19. Otwórz listę rozwijaną na stałe z select2
- 20. Jak utworzyć listę rozwijaną Hiperłącze bez przycisku GO?
- 21. Czy można zmienić combobox WinForms, aby wyłączyć wpisywanie?
- 22. Jak utworzyć listę rozwijaną z prawidłowymi wartościami ustawionymi przez validates_inclusion_of?
- 23. MVC3: Ustaw listę rozwijaną Wybrana wartość
- 24. Wyczyść i odśwież listę rozwijaną jQuery Wybierz
- 25. Jak mogę zapobiec przeciągnięciu mapy przez ulotkę, aby pasowała do wyskakujących znaczników?
- 26. Jak utworzyć listę rozwijaną wyboru czcionki za pomocą podglądu?
- 27. Ustaw szerokość pozycji listy, aby wypełnić nieuporządkowaną listę
- 28. Jak utworzyć listę rozwijaną dynamicznie za pomocą jQuery?
- 29. Jak wypełnić listę rozwijaną przed załadowaniem strony w formularzach internetowych?
- 30. Jak utworzyć listę rozwijaną bez użycia UIPIckerviewcontroller w IPhone?
Dziękuję. Zdecydowałem się zmodyfikować właściwość DropDownWidth w zdarzeniu DropDown. –
Może być lepszym pomysłem, aby subskrybować zdarzenia 'DataSourceChanged',' ValueMemberChanged' i 'DisplayMemberChanged' zamiast ukrywania właściwości. –
Ponieważ jest to nadpisanie klasy, najczystszym sposobem jest dodanie override dla 'OnDropDown', aby dodać wywołanie tam przed wykonaniem' base.OnDropDown (e) '. I przy okazji, dla tego końcowego sprawdzenia 'if>', po prostu zapisz tę szerokość w zmiennej zamiast wywoływać te obliczenia dwa razy. – Nyerguds