Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tooltip wird nicht angezeigt

76 views
Skip to first unread message

Armin Zingler

unread,
Oct 1, 2009, 5:49:38 PM10/1/09
to
Servus,

auf einer Form liegt ein TLP (TableLayoutPanel) (7 Spalten, 8 Zeilen).

Zur Laufzeit wird in jede Zelle jeweils ein Panel eingefᅵgt, und in jedes
Panel wird 1 Button eingefᅵgt. Jeder Button hat einen Tooltip-Text, der mit

Me.ToolTip1.SetToolTip(btn, "Text")

gesetzt wird. Dieses Fᅵllen des TLPs geschieht im Load-Ereignis des Formulars.
Nach dem Programmstart funktionieren die Tooltips immer.

Per F5 (Aktualisieren) kann der Benutzer den Neuaufbau auslᅵsen. Dieser
besteht aus der Entfernung der bisherigen Controls aus dem TLP und
anschlieᅵendem Aufruf der selben Funktion, die auch im Load-Ereignis
zum Befᅵllen des TLP aufgerufen wird.

Das Problem ist, dass die Tooltips zu 95% nicht mehr funktionieren. Das heiᅵt,
bei nur 1 von 20 Mal F5 drᅵcken werden danach die Tooltips angezeigt. Das ist
leider kein nachvollziehbares Verhalten.

Zur Fehlereingrenzung habe ich zuerst den Aufruf von "Tooltip1.SetToolTip"
mitprotokolliert. Ergebnis: es wird immer aufgerufen.
Anschlieᅵend habe ich das MouseMove-Ereignis der Buttons behandelt und darin
mir den derzeit zugewiesenen Tooltip anzeigen lassen. Ergebnis: Der Tooltip
ist vorhanden, er wird aber leider nicht angezeigt.

Private Sub OnButtonMouseMove( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs)

Debug.Print("tooltiptext: " & ToolTip1.GetToolTip(DirectCast(sender, Control)))
End Sub

Danach habe ich das Popup-Ereignis des Tooltips behandelt. Ergebnis: In den Fᅵllen
(also fast allen), in denen der Tooltip fehlt, wird auch kein Popup-Ereignis
ausgelᅵst. Hᅵtte ja sein kᅵnnen, dass der Tooltip versteckt angezeigt wird.


...... Ich konnte es jetzt in einem Testprojekt nachvollziehen. Code s.u.
Resultat: Das Problem tritt nur auf, wenn das TLP mindestens 2 Zeilen
_und_ mindestens 2 Spalten hat. Bei 1 x n oder n x 1 tritt es nicht auf.

Kennt jemand dieses merkwᅵrdige Verhalten? (VB 2008, WinXP/SP3)

Bei MSFT Connect habe ich das Problem nicht gefunden. Wenn es jemand von euch
nachvollziehen kann, werde ich den Bug zurᅵckmelden.


Armin


Code:
Public Class Form1

Dim TLP As TableLayoutPanel
Dim TT As ToolTip

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

TLP = New TableLayoutPanel
TLP.Dock = DockStyle.Fill
TLP.ColumnCount = 2
TLP.RowCount = 2

For i = 1 To TLP.ColumnCount
TLP.ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 100.0F / TLP.ColumnCount))
Next

For i = 1 To TLP.RowCount
TLP.RowStyles.Add(New ColumnStyle(SizeType.Percent, 100.0F / TLP.RowCount))
Next

TT = New ToolTip
TT.AutomaticDelay = 100

Controls.Add(TLP)

KeyPreview = True

Fill()

End Sub
Sub Fill()

For i = TLP.Controls.Count - 1 To 0 Step -1
TLP.Controls.RemoveAt(i)
Next

For i = 1 To TLP.ColumnCount * TLP.RowCount
Dim pnl As New Panel
Dim btn As New Button

btn.Dock = DockStyle.Top
btn.Text = i.ToString
TT.SetToolTip(btn, "tooltip " & i.ToString)

pnl.Dock = DockStyle.Fill
pnl.Controls.Add(btn)

TLP.Controls.Add(pnl)
Next
End Sub
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)

MyBase.OnKeyDown(e)

If e.KeyCode = Keys.F5 AndAlso e.Modifiers = Keys.None Then
Fill()
End If

End Sub
End Class


Armin Zingler

unread,
Oct 1, 2009, 6:40:17 PM10/1/09
to
Armin Zingler schrieb:

> For i = TLP.Controls.Count - 1 To 0 Step -1
> TLP.Controls.RemoveAt(i)
> Next

Tlp.controls.clear

hᅵtt's auch getan. ;-/


--
Armin

Armin Zingler

unread,
Oct 1, 2009, 6:52:50 PM10/1/09
to
Armin Zingler schrieb:


Ok ok,,,, nachdem ich schon ewig nach dem Fehler gesucht hatte, habe ich natᅵrlich
jetzt nach dem Posten selbst eine Lᅵsung gefunden:
Bevor die Controls aus dem TLP entfernt werden, muss fᅵr sie jeweils der Tooltip
entfernt werden:

tooltip1.settooltip(DerButton, Nothing)

Ansonsten kommt der Tooltip anscheinend durcheinander. Ich vermute, dass er intern
bei der Mausbewegung die alten, bereits zerstᅵrten Controls noch vor den
neuen findet und dazu eben nichts mehr anzeigt, weil die schon gelᅵscht wurden.
Ob das jetzt ein Bug ist? Wohl eher nicht.


--
Armin

0 new messages