2016-05-17 19 views
0

Ich verwende eine ComboBox im Text- und DropDown-Modus (Standard) und ich möchte eine ItemHeight von X (z. B. 40) haben aber die ComboBox Height auf Y (z. B. 20) gesetzt.Winforms ComboBox Höhe unterscheidet sich von ItemHeight

Der Grund dafür ist, dass ich beabsichtige, die ComboBox für eine Schnellsuche-Funktion zu verwenden, in der der Benutzer Text eingibt und detaillierte Ergebnisse in den Listenelementen gerendert werden. Es ist nur eine Eingabezeile erforderlich.

Leider sperrt Winforms automatisch die ComboBox Height an die ItemHeight und ich sehe keine Möglichkeit, dies zu ändern. Wie kann ich die Height der ComboBox von der ItemHeight abweichen lassen?

+2

Bitte den Designer-Code für die Steuerung teilen und eine UI für was – Sajal

+0

erforderlich Ich entwickle hauptsächlich in Windows Phone, und wenn ich so eine schnelle Suche Funktionalität zu implementieren brauchte ich früher ein TextBox, in der der Benutzer eingibt, und darunter eine Listenansicht, in der die Suchergebnisse gerendert werden. Es hat sehr gut funktioniert und bietet viel Platz für die Anpassung. – WPMed

+0

Haben Sie versucht, DrawMode zu ändern? – Pikoh

Antwort

1

Was Sie tun müssen, ist zunächst, ändern DrawMode von Normal zu OwnerDrawVariable. Dann müssen Sie zwei Ereignisse behandeln: DrawItem und MeasureItem. Sie wäre so etwas wie:

private void comboBox1_MeasureItem(object sender, MeasureItemEventArgs e) 
    { 
     e.ItemHeight = 40; //Change this to your desired item height 
    } 


    private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     ComboBox box = sender as ComboBox; 

     if (Object.ReferenceEquals(null, box)) 
      return; 

     e.DrawBackground(); 

     if (e.Index >= 0) 
     { 
      Graphics g = e.Graphics; 

      using (Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
            ? new SolidBrush(SystemColors.Highlight) 
            : new SolidBrush(e.BackColor)) 
      { 
       using (Brush textBrush = new SolidBrush(e.ForeColor)) 
       { 
        g.FillRectangle(brush, e.Bounds); 

        g.DrawString(box.Items[e.Index].ToString(), 
           e.Font, 
           textBrush, 
           e.Bounds, 
           StringFormat.GenericDefault); 
       } 
      } 
     } 

     e.DrawFocusRectangle(); 
    } 
Verwandte Themen