Ermitteln ob Textbox aktiv ist

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

    Ermitteln ob Textbox aktiv ist

    Schönen Nachmittag!
    Ich hänge leider wieder an einem Problem, und zwar möchte ich ermitteln ob meine Textbox ausgewählt ist. (Also aktiv)
    Leider stehe ich auf dem Schlauch, da ich es bis jetzt noch nie benötigt habe. Desweiteren soll dies natürlich ohne Timer ablaufen.

    Bitte um Hilfe / Ansätze.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Definiere

    Gather schrieb:

    ob Textbox aktiv ist
    Was hat das für einen Hintergrund?
    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!
    Hmm. Erstmal Danke. Habe ich wohl übersehen.
    Ich bastle derzeit an meinen Controls weiter, und möchte die Umrandung ändern, wenn die Textbox ausgewählt ist,
    Dabei stoße ich jedoch auf das vorhin vorgestellte Problem. Und ich weiß selbst mit der Eigenschaft nicht wie ich es lösen kann.
    Ich habe es erstmal simple mit:

    VB.NET-Quellcode

    1. Dim GG As Graphics = e.Graphics
    2. If Me.Focused = True Then
    3. p = New Pen(Color.FromArgb(0, 164, 240))
    4. End If
    5. GG.DrawRectangle(p, New Rectangle(0, 0, Width - 1, Height - 1))

    Im OnPaint-Event versucht. Jedoch funkt das nicht. Er erkennt nicht ob es fukusiert ist, bzw. ändert sich überhaupt nichts.

    @RodFromGermany
    Wie gesagt, wenn die Textbox ausgewählt ist soll sich die Farbe der gezeichnete Umrandung ändern.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Gather schrieb:

    soll sich die Farbe der gezeichnete Umrandung ändern.
    OK. Such mal nach OwnerDraw.
    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!
    Controls haben außendem die Events GotFocus und LostFocus
    Beispiel:

    VB.NET-Quellcode

    1. Public Class MyTextBox
    2. Inherits Windows.Forms.TextBox
    3. Protected Overrides Sub OnGotFocus(e As System.EventArgs)
    4. MyBase.OnGotFocus(e)
    5. Me.Font = New Font(Me.Font, FontStyle.Bold)
    6. Me.ForeColor = Color.Black
    7. End Sub
    8. Protected Overrides Sub OnLostFocus(e As System.EventArgs)
    9. MyBase.OnLostFocus(e)
    10. Me.Font = New Font(Me.Font, FontStyle.Regular)
    11. Me.ForeColor = Color.DarkGray
    12. End Sub
    13. Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    14. MyBase.OnPaint(e)
    15. End Sub
    16. End Class
    Kannte ich schon. Habe es ebenfalls damit versucht.
    Jedoch vererbe ich mir nichts aus der Textbox, denn ich benutze inherits Control
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim p As Pen = New Pen(Color.FromArgb(128, 128, 128))
    2. Dim b As Brush = New SolidBrush(Color.FromArgb(51, 51, 51))
    3. Enum CurrentState
    4. Normal = 0
    5. Hover = 1
    6. Pressed = 2
    7. Activ = 3
    8. End Enum
    9. Private _CurrentState As CurrentState = CurrentState.Normal
    10. Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    11. Dim GG As Graphics = e.Graphics
    12. If Style = Style.Dark Then
    13. b = New SolidBrush(Color.FromArgb(51, 51, 51))
    14. GG.FillRectangle(b, New Rectangle(0, 0, Width - 1, Height - 1))
    15. If _CurrentState = CurrentState.Normal Then
    16. p = New Pen(Color.FromArgb(98, 98, 98))
    17. ElseIf _CurrentState = CurrentState.Hover Then
    18. p = New Pen(Color.FromArgb(158, 158, 158))
    19. ElseIf _CurrentState = CurrentState.Activ Then
    20. p = New Pen(Color.FromArgb(0, 164, 240))
    21. End If
    22. ElseIf Style = Style.Light Then
    23. b = New SolidBrush(Color.White)
    24. GG.FillRectangle(b, New Rectangle(0, 0, Width - 1, Height - 1))
    25. If _CurrentState = CurrentState.Normal Then
    26. p = New Pen(Color.FromArgb(98, 98, 98))
    27. ElseIf _CurrentState = CurrentState.Hover Then
    28. p = New Pen(Color.FromArgb(158, 158, 158))
    29. ElseIf _CurrentState = CurrentState.Activ Then
    30. p = New Pen(Color.FromArgb(0, 164, 240))
    31. End If
    32. End If
    33. Base.BackColor = C
    34. GG.DrawRectangle(p, New Rectangle(0, 0, Width - 1, Height - 1))
    35. MyBase.OnPaint(e)
    36. End Sub
    37. Protected Overrides Sub OnMouseEnter(e As System.EventArgs)
    38. _CurrentState = CurrentState.Hover
    39. Invalidate()
    40. MyBase.OnMouseEnter(e)
    41. End Sub
    42. Protected Overrides Sub OnMouseLeave(e As System.EventArgs)
    43. _CurrentState = CurrentState.Normal
    44. Invalidate()
    45. MyBase.OnMouseLeave(e)
    46. End Sub
    47. Protected Overrides Sub OnMouseUp(e As System.Windows.Forms.MouseEventArgs)
    48. _CurrentState = CurrentState.Hover
    49. Invalidate()
    50. MyBase.OnMouseUp(e)
    51. End Sub
    52. Protected Overrides Sub OnMouseDown(e As System.Windows.Forms.MouseEventArgs)
    53. _CurrentState = CurrentState.Hover
    54. Invalidate()
    55. MyBase.OnMouseDown(e)
    56. End Sub
    57. Protected Overrides Sub OnGotFocus(e As System.EventArgs)
    58. _CurrentState = CurrentState.Activ
    59. Invalidate()
    60. MyBase.OnGotFocus(e)
    61. End Sub
    62. Protected Overrides Sub OnLostFocus(e As System.EventArgs)
    63. _CurrentState = CurrentState.Normal
    64. Invalidate()
    65. MyBase.OnLostFocus(e)
    66. End Sub

    Leider komm ich auch so nicht weiter.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    nene. Das funktioniert ja.
    Jedoch wie gesagt, ich bekomme es nicht hin, dass CurrentState auf Activ kommt. Das Malen ist ja nicht wirklich das Problem.

    Aber ich habs jetzt dennoch nach oben gegeben.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Es ist vielleicht nicht nicht die beste Lösung (die schlechteste!) aber du kannst einen Timer nehmen, wo du folgendes reinschreibst:

    VB.NET-Quellcode

    1. If Me.Focused Then
    2. _CurrentState = CurrentState.Activ
    3. Invalidate()
    4. End If



    Ich weiß, es ist jede andere Möglichkeit besser, die funktioniert, aber das mit dem Timer funktioniert auf jeden Fall.
    Mfg
    Vincent