2017-10-24 2 views
0

In meiner Windows-Formularanwendung in C# habe ich viele TextBox Steuerelemente, die alle die gleiche ToolTip Steuerelement/Nachricht an sie angeschlossen haben. Ohne jegliche Anpassung funktionierte die ToolTip perfekt.Angepasste ToolTip funktioniert nicht richtig

enter image description here

Nun habe ich BackColor die ToolTip Ballons den Code-Schnipsel als die beste Antwort in Change winform ToolTip backcolor ausgewählt werden. Das funktioniert gut, um eine BackColor zu dem ToolTip Ballon hinzuzufügen, aber es entfernte irgendwie alle Environment.NewLine in der Zeichenfolgennachricht. Es scheint jedoch, dass der Ballon die gleiche Größe zeigt.

enter image description here

Kann mir jemand sagen, warum dies geschieht und wie dieses Problem beheben?

private ToolTip _tt = new ToolTip(); 
private string _ttipText; 
private void ToolTipCustomization(){ 
    string nl = Environment.NewLine; 
    /* This text is not shown properly when BackColor is added */ 
    _ttipText = "The value must be: " + nl + 
         "1, Numeric " + nl + 
         "2, Between 0 and 1000" + nl + 
         "3, A multiple of 10"; 
    _tt.OwnerDraw = true; 
    _tt.BackColor = Color.LightBlue; 
    _tt.Draw += new DrawToolTipEventHandler(TT_Draw); 
} 

private void TT_Draw(object sender, DrawToolTipEventArgs e){ 
    e.DrawBackground(); 
    e.DrawBorder(); 
    e.DrawText(); 
} 

//Adding TextBox controls programmatically 
private Textbox[] tbx = new TextBox[20]; 
private void CreateTextBox(){ 
    for(int i=0; i<20; i++){ 
     tbx[i] = new TextBox(); 
     /* More TextBox properties for design (Omit) */ 
     _tt.SetToolTip(tbx[i], _ttipText); //Set ToolTip text to tbx here 
     this.Controls.Add(tbx[i]); 
    } 
} 

Ich versuchte PopupEventHandler, in dem Abonnement ich die Ballongröße vergrößert, aber es hat nicht mein Problem zu lösen.

+1

Sie mögen einfach nicht die Standard e.DrawText() - Implementierung. Es verwendet TextFormatFlags.SingleLine. Sie müssen Ihre eigenen schreiben, damit es besser aussieht. –

Antwort

1

Schließlich konnte ich eine Lösung für meine eigene Frage finden dank der Beratung von Hans Passant.

Es war so einfach wie ein TextFormatFlags Parameter e.DrawText wie die folgenden:

private void TT_Draw(object sender, DrawToolTipEventArgs e){ 
    e.DrawBackground(); 
    e.DrawBorder(); 
    e.DrawText(TextFormatFlags.VerticalCenter); /* here */ 
} 

enter image description here

jetzt richtig den Text zeigt es ist. Vielen Dank!