Tooltip wird nicht angezeigt

01/10/2009 - 23:49 von Armin Zingler | Report spam
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
 

Lesen sie die antworten

#1 Armin Zingler
02/10/2009 - 00:40 | Warnen spam
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

Ähnliche fragen