Forums Neueste Beiträge
 

Tooltip funktioniert nur manchmal

09/06/2010 - 15:42 von Wolfgang Badura | Report spam
Hallo vb .net Spezialisten,

ich habe für eine Textbox einen Tooltip eingerichtet.
Wenn ich das Formular öffne und mit der Maus über die fragliche Textbox
fahre wird sie auch angezeigt.
Das funktioniert meistens zweimal.
Fahre ich zu einer anderen Textbox und dann wieder zurück, so wird der
Tooltip nicht mehr angezeigt.
Ich kann machen was ich will, nichts nützt etwas dagegen.
Nach einem Neustart des Programmes wird er wie oben beschrieben anfànglich
angezeigt, aber nach 2-3 mal ist wieder Schluß.

Ich habe nun einen Workaround geschrieben, der mit dem Ereignis
..._MouseMove operiert und den Tooltip immer neu belegt.
Damit das nur beim erstmaligen Fahren in die Textbox geschieht und der
Tooltip nach einigen Sekunden wieder verschwindet,
frage ich einen Schalter ab und setze diesen am Ende des Sub´s.
Wenn ich die Textbox mit dem Mauscursor verlasse lösche ich ihn wieder.
Der Schalter ist public und wird nur in diesen beiden Sub´s verwendet.

Codeschnipsel des Workarounds:
***********
Private Sub InTagenDiff_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles InTagenDiff.MouseMove
Dim strToolTip As String = "Doppelklick oder Enter addiert" & vbCrLf &
"die Tage zum von-Datum"

' damit wird, solange sich der Mauscursor im Textfeld InTagenDiff
' befindet der Tooltip nur einmal eingeschaltet.
' Damit verschwindet er nach der Autopopdelay-Zeit (zB. 4000 = 4 secs)
If Not bInTagenDiff_MouseMove Then
With ToolTip1
.InitialDelay = 500
.AutomaticDelay = 200
.AutoPopDelay = 4000
.SetToolTip(sender, strToolTip)
End With
End If
' bInTagenDiff_MouseMove auf True setzen, wenn
' sich der Mauscursor im Textfeld befindet.
bInTagenDiff_MouseMove = True
End Sub

Private Sub grpInTagenDiff_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles grpInTagenDiff.MouseMove
' bInTagenDiff_MouseMove auf False setzen, wenn
' der Mauscursor das Textfeld InTagenDiff verlàßt.
' Damit wird der Tooltip immer wieder neu initialisiert!
bInTagenDiff_MouseMove = False
End Sub
***********
Das funktioniert ganz prima und vor allem ***immer***.
Warum aber funktioniert der Tooltip nicht wie er sollte?
Gibts ev. von MS eine Korrektur?

Die nicht funktionierende Version war die Initialisierung des Tooltips beim
Load-Ereignis des Formulares:
ToolTip1.SetToolTip(InTagenDiff, _
"Doppelklick oder Enter addiert" & vbCrLf & "die Tage zum
von-Datum")

XP Prof, Sp3, VB 2008 SP 1
Die Textbox selbst ist in einer Groupbox plaziert. Wenn ich die Textbox
außerhalb der Groupbox verschiebe,
àndert das nichts an dem Verhalten des Tooltips.

Ein zweckdienlicher Vorschlag würde mir sehr helfen.

Mit Gruß aus Wien,
Wolfgang
 

Lesen sie die antworten

#1 Peter Götz
09/06/2010 - 18:13 | Warnen spam
Hallo Wolfgang,

hier ein Beispiel mit 2 Textboxen, denen jeweils ein eigener
TooltipText zugeordnet wird.

' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private WithEvents TBox1 As TextBox
Private WithEvents TBox2 As TextBox
Private WithEvents TTip As ToolTip

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

TTip = New ToolTip
With TTip
.AutoPopDelay = 5000
.InitialDelay = 100
.ReshowDelay = 500
.ShowAlways = True
End With

TBox1 = New TextBox
With TBox1
.Name = "TBox1"
.Text = .Name
.Font = New Font("Arial", 12)

.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
.Height)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right
End With
Me.Controls.Add(TBox1)

TBox2 = New TextBox
With TBox2
.Name = "TBox2"
.Text = .Name
.Font = TBox1.Font

.SetBounds _
(10, TBox1.Bottom + 20, _
TBox1.Width, .Height)

.Anchor = TBox1.Anchor
End With
Me.Controls.Add(TBox2)

TTip.SetToolTip(TBox1, "TooltipText 1")
TTip.SetToolTip(TBox2, "TooltipText 2")
End Sub
End Class
' \\\ E N T E

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen