2016-07-30 13 views
1

Ich muss meine Combobox wie dieses Bild anpassen.Zentrum Text in benutzerdefinierten Combobox

enter image description here
Mein Code arbeitete fine.But Es ist mit 2 Fragen:
1.den Textzug nach links, wenn ich, wie unten

enter image description here
2.das Hintergrund wiederum das Fenster minimieren zu grün, wenn ein anderes Fenster meine Anwendung bedeckt.

enter image description here

Hier ist mein Code:

//DrawItem 
protected override void OnDrawItem(DrawItemEventArgs e) 
{ 
    e.DrawBackground(); 
    e.DrawFocusRectangle(); 
    if (e.Index >= 0) { 
    Graphics g = e.Graphics; 
    Brush brs = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? 
    new SolidBrush(SelectedBackColor) : new SolidBrush(e.BackColor); 
    g.FillRectangle(brs, e.Bounds); 
    using (StringFormat sformat = new StringFormat()) { 
    sformat.LineAlignment = StringAlignment.Center; 
     sformat.Alignment = StringAlignment.Center; 
     e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, sformat); 
} 
//paint 
protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    if (index >= 0) { 
     using (Brush br = new SolidBrush(this.ForeColor)) { 
     StringFormat sformat = new StringFormat(); 
     sformat.LineAlignment = StringAlignment.Center; 
     sformat.Alignment = StringAlignment.Center; 
     e.Graphics.DrawString(this.Text, this.Font, br, this.ClientRectangle, sformat); 
     e.Graphics.DrawImage(Resource1.arrow,this.ClientRectangle.Right - 34, 0,32,32); 
     } 
    } 
} 

so etwas ist falsch?

+0

Ihr Code wird nicht kompiliert; mindestens zwei schließende Curlies fehlen. Bitte poste nur echten Code! - Haben 'e.Bounds' und/oder' ClientRectangle' tatsächlich Platz für den Pfeil? Ansonsten: Die Fehlersituationen klingen komisch. Nach dem Minimieren, und ich nehme an, dass das Wiederherstellen funktioniert, bleibt die Ausrichtung/Platzierung falsch? – TaW

+0

Entschuldigung für meinen Fehler.ja, ich denke das Problem ist e.Bounds. Combobox Größe ist 135, 34 und e.Bouds ist 133. Wenn Sie das Fenster minimieren, ist e.Bounds 112. e.Bounds ändert sich beim Minisieren. Wie es zu beheben? @ TaW – Jandy

Antwort

0

können Sie Graphics.MeasureString verwenden, um die Größe der Zeichenfolge zu bekommen zu ziehen und dann entscheiden, wo die Zeichenfolge starten Zeichnung:

SizeF size = new SizeF(); 
size = e.Graphics.MeasureString(this.Text, this.Font); 
PointF DrawPoint = new PointF((this.Width - size.Width)/2, (this.Height - size.Height)/2); 
e.Graphics.DrawString(this.Text, this.Font, br, DrawPoint, sformat); 
+0

Entschuldigung für meine späten.Nichts Änderungen.Ich bin auf der Suche nach der Art und Weise zu beheben e.Bounds und ausgewählten Artikel Stil, wenn das Fenster @ Ashkan Mobayen Khiabani minimieren – Jandy

0

ich das Problem herausgefunden wird DropDown state.I haben DroppedDown zu überprüfen, bevor Pinsel setzen

protected override void OnDrawItem(DrawItemEventArgs e) 
{ 
    e.DrawBackground(); 
    if (e.Index >= 0 && DroppedDown) { 
    Brush brs = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? 
    new SolidBrush(SelectedBackColor) : new SolidBrush(Color.Red); 
    e.Graphics.FillRectangle(brs, e.Bounds); 
    using (StringFormat sformat = new StringFormat()) { 
     sformat.LineAlignment = StringAlignment.Center; 
     sformat.Alignment = StringAlignment.Center; 
     e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, sformat); 
}