Heute stellen wir Ihnen eine Funktion vor, die es ermöglicht, überlange Texte in einer TextBox als ToolTip anzuzeigen. Der Tipp funktioniert hierbei sowohl für eine normale einzeilige TextBox, als auch für eine MultiLine-TextBox. Bei einer MultiLine-TextBox macht das Ganze aber nur Sinn, wenn kein vertikaler Scrollbalken eingeblendet wird, sondern nur der horizontale Scrollbalken. Hier der Code für die autom. ToolTip-Anzeige: ' ToolTip-Objekt Private oToolTip As New ToolTip ''' <summary> ''' autom. ToolTip-Anzeige überlanger Textzeilen ''' </summary> ''' <param name="oTextBox">TextBox-Control</param> ''' <param name="p">aktuelle Mausposition</param> Public Sub TextBox_SetAutoToolTip(ByRef oTextBox As TextBox, ByVal p As Point) With oTextBox ' Zeile unter dem Mauszeiger ermitteln Dim CharPos As Integer = .GetCharIndexFromPosition(p) If CharPos >= 0 AndAlso CharPos < .TextLength Then ' Zeileninhalt ermitteln Dim Line As Integer = .GetLineFromCharIndex(CharPos) Dim sLine As String = .Lines(Line) ' Prüfen, ob Text länger als Control-Innenbereich Dim ClientSize As Size = .ClientSize Dim TextSize As Size = TextRenderer.MeasureText(sLine, .Font) If TextSize.Width > ClientSize.Width Then If oToolTip.GetToolTip(oTextBox) <> sLine Then ' ToolTip setzen oToolTip.SetToolTip(oTextBox, sLine) End If Else ' ToolTip löschen oToolTip.SetToolTip(oTextBox, "") End If Else ' ToolTip löschen oToolTip.SetToolTip(oTextBox, "") End If End With End Sub Aufrufbeispiel:
Im Form_Load Ereignis füllen wir die TextBox-Controls: Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load With TextBox1 .Width = 245 .Text = "Dies ist eine überlange Eingabe, die innerhalb " & _ "der TextBox nicht vollständig angezeigt wird." End With With TextBox2 .Width = 245 .Height = 80 .Text = "Zeile1" & vbCrLf & _ "Dies ist eine überlange Eingabe, die innerhalb der " & _ "TextBox nicht vollständig angezeigt wird." & vbCrLf & _ "Zeile 3" End With End Sub So... und wenn der User dann den Mauszeiger auf die TextBox bewegt, soll der überlange Text als ToolTip angezeigt werden: Private Sub TextBox1_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove ' Text ggf. als ToolTip anzeigen TextBox_SetAutoToolTip(TextBox1, e.Location) End Sub Private Sub TextBox2_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox2.MouseMove ' Text ggf. als ToolTip anzeigen TextBox_SetAutoToolTip(TextBox2, e.Location) End Sub |