2010-06-23 9 views
7

Domyślnie elementy w Combobox C# są wyrównane do lewej. Czy są dostępne jakieś opcje, aby zmienić to uzasadnienie, z wyjątkiem nadpisywania metody DrawItem i ustawiania trybu combobox -> DrawMode.OwnerDrawFixed?Prawidłowo usprawniony combobox w C#

Cheers

+0

Dodałem tag WinForm do pytania, ponieważ zakładam, że wspomniałeś DrawItem, że nie odwołujesz się do WPF. Nie ma to jednak nic wspólnego z C#, ale nie chciałem usunąć tagu. – Josh

+0

Dzięki za oznaczenie go –

Odpowiedz

2

w WPF będzie to tak proste, jak określając ItemContainerStyle. W Windows Forms jest to nieco trudniejsze. Bez niestandardowego rysunku można ustawić właściwość RightToLeft w ComboBox, ale niestety wpłynie to również na przycisk rozwijania.

Ponieważ Windows Forms używa natywnego ComboBox, a Windows nie ma stylu ComboBox, takiego jak ES_RIGHT, który ma wpływ na wyrównanie tekstu, myślę, że jedyną opcją jest ucieczka się do losowania właściciela. Prawdopodobnie warto wyprowadzić klasę z ComboBox i dodać właściwość TextAlignment lub coś podobnego. Następnie zastosowałbyś swój rysunek, gdyby wyrównanie pola tekstowego było wyśrodkowane lub wyrównane do prawej.

+0

Witam ... W takim przypadku jak zastosować TextAlignment do kontrolki? Podpowiedzi w formacie ciąg tutaj? –

+0

Nie mówię, że trzeba utworzyć kontrolę, która pochodzi z ComboBox i dodać właściwość * new * o nazwie TextAlignment. Następnie w swojej metodzie OnDrawItem można wziąć pod uwagę tę właściwość, zamiast twardego kodowania wyrównania. – Josh

+0

Przykład: http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawitem.aspx – Josh

4

Można ustawić styl sterowania na RightToLeft = RightToLeft.Yes, jeśli nie masz nic przeciwko widgetowi upuszczania po drugiej stronie.

lub

ustawić DrawMode = OwnerDrawFixed; i zaczep zdarzenie DrawItem, potem coś podobnego

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     if (e.Index == -1) 
      return; 
     ComboBox combo = ((ComboBox) sender); 
     using (SolidBrush brush = new SolidBrush(e.ForeColor)) 
     { 
      e.DrawBackground(); 
      e.Graphics.DrawString(combo.Items[e.Index].ToString(), e.Font, brush, e.Bounds, new StringFormat(StringFormatFlags.DirectionRightToLeft)); 
      e.DrawFocusRectangle(); 
     } 
    } 
+0

Witam ... Nie ma żadnej różnicy, którą widzę nawet po zaimplementowaniu tego programu obsługi. –

+0

nie wiesz dlaczego, czy pamiętałeś ustawić właściwość pola kombi DrawMode do OwnerDrawFixed. I czy masz jakieś rzeczy na liście. – Paul

+0

Działa doskonale dla mnie! – Dan

0

Musisz "trybRysowania = System.Windows.Forms.DrawMode.OwnerDrawFixed" i własną metodę draw jak to.

Powiązane problemy