vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB2005, VB200801.06.10
Automatischer ToolTip für die TextBox

Kann der Text in einer TextBox nicht vollständig angezeigt werden, weil die TextBox in der Breite zu klein ist, wird dieser automatisch als ToolTip angezeigt.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.763 
http://www.tools4vb.de/System:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

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:
Platzieren Sie auf die Form zwei TextBox-Controls:

  • TextBox1
  • TextBox2 mit MultiLine=True, ScrollBars=1-Horizontal und WordWrap=False

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