Tooltip mit Buttonklick dauerhaft anzeigen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Tooltip mit Buttonklick dauerhaft anzeigen

    Halli Hallo,

    ich bin neu hier und haben auch noch noch so viel Ahnung wie ich das Forum zu benutzen habe, ich hoffe das gibt sich mit der Zeit ;)


    Nun meine Frage:

    Ich will mit einem Buttonklick einen Tooltip bei einer vorher definierten position, dauerhaft anzeigen. Das heißt auch wenn ich die maus bewege oder einen andere button klicke soll das Tooltip weiterhin angezeigt werden. Ist das möglich?

    Mfg
    Lukas
    Willkommen im Forum. :thumbup:
    In diesem Fall ist es sinnvoll, dass Du einen nicht modalen Dialog mit FormBorderStyle = None erstellst und den Inhalt vom aufrufenden Fenster aus befüllst.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für eure schnellen Antworten.

    Im grunde genommen habe ich vor, dass ich für mein Programm ein Art "Tutorial" mache. Es gibt einen weiter und einen zurück Button mit welchen man durch das tutorial navigieren kann.
    Klickt man einen button soll bei einem Element der Form ein hinweistext angezeigt werden, der beschreibt, was genau dieses Elemement kann.

    versteht ihr so grob was ich vor habe?
    Das ist schon möglich. Bswp. so:

    VB.NET-Quellcode

    1. ToolTip1.Show("blabla", ListBox1)

    und schon bleibt es auf der Listbox, bis du es schließt. Aber: Ein Tooltip kann nu einmal angezeigt werden. Du bräuchtest also für jedes Control ein eigenes Tooltip, wenn du die gleichzeitig anzeigen willst. Außerdem behalten die auch ihre Position, wenn die Form bewegt wird. Das ist natürlich schlecht. Ich würde daher wie Rod schon gesagt hat, mit einer 2. Form arbeiten. Dort kannst du selbst zeichnen, was du willst und dann mit TransparencyKey den Rest durchsichtig machen.

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Wenn es keine passende Überladung gibt(ich denke schon, dass es die gibt) wirst du wohl um folgendes nicht rum kommen: Ich habe sowas noch nie ausprobiert. Aber wie wäre es wenn du bei tooltip.Show(...) als duration In32.MaxValue angibt. Und wenn du auf weiter drückst einfach wieder versteckst.
    Damit es "halbwegs übersichtlich bleibt", kannst du einfach z.B. eine Queue verwenden in welche du alles steckst was du anzeigen möchtest. Beim Weiter Button holst du dir einfach das nächste Element zeigst es an. Wenn du dann wieder Weiter drückst, blendest du dieses aus, holst dir das nächste und zeigst es an.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ich hab das mit ToolTip1.Show("blabla", ListBox1) mal ausprobiert. Das Tooltip wird nur angezeigt wenn ich mit der maus drauf geh (Standard halt)

    Dann komm um die 2. Form wohl nicht rum. Muss ich mal ausprobieren.

    Vielen Dank und Mahlzeit :)
    Dann hast du es falsch gemacht. Wenn ich Tooltip.Show() nutze, wird beim Buttonclick sofort das Tooltip angezeigt.

    Übrigens kannst du es mit einer Form so machen:
    Form2 zum projekt hinzufügen, dann:

    VB.NET-Quellcode

    1. Imports System.Windows.Forms.VisualStyles
    2. Public Class Form2
    3. Private renderer As VisualStyleRenderer
    4. Private tooltipBackground As VisualStyleElement
    5. Friend Shadows Controls As Control.ControlCollection
    6. Private Sub Form2_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    7. For Each c As Control In Controls
    8. If c.Tag IsNot Nothing Then
    9. Dim textRect As SizeF = e.Graphics.MeasureString(c.Tag.ToString, Me.Font)
    10. renderer.DrawBackground(e.Graphics, New Rectangle(c.Bounds.X, c.Bounds.Y, CInt(textRect.Width) + 6, CInt(textRect.Height) + 6))
    11. e.Graphics.DrawString(c.Tag.ToString, Me.Font, Brushes.Black, New Point(c.Bounds.X + 3, c.Bounds.Y + 3))
    12. End If
    13. Next
    14. End Sub
    15. Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    16. tooltipBackground = VisualStyleElement.ToolTip.Standard.Normal
    17. If VisualStyleRenderer.IsElementDefined(tooltipBackground) Then renderer = New VisualStyleRenderer(tooltipBackground)
    18. Me.BackColor = Color.Blue
    19. Me.TransparencyKey = Color.Blue
    20. End Sub
    21. End Class


    Um die Form2 zu benutzen nun in deinem Button.Click-Event dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim tooltips As New Form2
    3. tooltips.ShowInTaskbar = False
    4. tooltips.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    5. tooltips.StartPosition = FormStartPosition.Manual
    6. tooltips.Location = PointToScreen(Me.ClientRectangle.Location)
    7. tooltips.Size = Me.ClientSize
    8. tooltips.Controls = Me.Controls
    9. tooltips.ShowDialog()
    10. End Sub


    Da die Form2 ja nun als Dialog die eigentliche Form überdeckt und unbenutzbar macht, kannst du zum Schliße noch sowas benutzen:

    VB.NET-Quellcode

    1. Private Sub Form2_Click(sender As Object, e As System.EventArgs) Handles Me.Click
    2. Me.Close()
    3. End Sub

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    iSnape schrieb:

    Dann komm um die 2. Form wohl nicht rum.
    Wenn Du das machst, löse es allgemein, dass Du die 2. Form in diesem Sinne allgemein nutzen kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!