Textboxen bei Enter färben

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von beanbear6.

    Textboxen bei Enter färben

    Hallo Profis, ein Problem hab ich noch, dann komme ich wieder ein großes Stück weiter: Ich hab auf einer Form z.B. 5 Editfelder, welche ich bei Enter wheat färben möchte und bei exit wieder white färben möchte Was ich aber nicht möchte, dass ich das jedes mal für jede Textbox schreiben muss. Ich muss also variabel feststellen, welche Box geEntert wurde. Ich hoffe ich konnts einigermaßen erklären. Bitte Euch (als Neuling) um Hilfe. VG beanbear
    Dann schreib eine eigene TextBox-Klasse:

    VB.NET-Quellcode

    1. Class MyTextBox : Inherits textBox
    2. End Class

    Dann packst Du in diese Klasse die beiden EventHandler* für GotFocus und LostFocus und schreibst in die jeweils rein, welche Farbe die TextBox dann haben soll. Dann speichern, kompilieren und dann hast Du in der ToolBox ganz oben Deine eigene TextBox mit den Sondereigenschaften.

    * Alternativ kannst Du auch die Methoden OnGotFocus und OnLostFocus überschreiben, darin Deine Änderungen vornehmen und dann am Ende der Methoden noch MyBase.OnGotFocus(e) bzw. MyBase.OnLostFocus(e) schreiben.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hi VaporiZed, leider bin i no net so fit um das umsetzen zu können... Würd mi freuen, wennst ein paar Codesnippsl zeigen könntest... I find auch die Ereignisse GotFocus net, aber z.B. Enter oder OnMouseClick. I würd mi freuen, wennst mir was schreibst. Bin dennoch fest am Lernen :)



    Hi zusammen, hab nun folgendes, aber des macht gar nix... muss ich da noch was zusätzlich einbauen?

    VB.NET-Quellcode

    1. Public Class TextBoxEx
    2. Inherits TextBox
    3. Private Sub TextBoxEx_Enter(sender As Object, e As EventArgs) Handles Me.Enter
    4. Me.BackColor = Color.Red
    5. End Sub
    6. Private Sub TextBoxEx_Leave(sender As Object, e As EventArgs) Handles Me.Leave
    7. Me.BackColor = Color.LightGreen
    8. End Sub
    9. End Class


    Beiträge zusammengefügt. Code-Tags eingefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Du bist nahe drann.

    VB.NET-Quellcode

    1. Protected Overrides Sub OnGotFocus(e As EventArgs)
    2. BackColor = Color.Red
    3. MyBase.OnGotFocus(e)
    4. End Sub
    5. Protected Overrides Sub OnLostFocus(e As EventArgs)
    6. BackColor = Color.White
    7. MyBase.OnLostFocus(e)
    8. End Sub

    ... oder auch ...

    VB.NET-Quellcode

    1. Protected Overrides Sub OnMouseEnter(e As EventArgs)
    2. BackColor = Color.Red
    3. MyBase.OnEnter(e)
    4. End Sub
    5. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    6. BackColor = Color.White
    7. MyBase.OnLeave(e)
    8. End Sub

    ... je nachdem.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FormFollowsFunction“ ()

    @beanbear6 Wenn sich alle diese TextBoxen in einem Dialog befinden, musst Du keine eigene TextBox machen, sondern kannst das direkt im Dialog behandeln.
    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!
    Na, jetzt aber …
    Nutze Visual Studio richtig. Beachte im CodeEditor die mittlere ComboBox. Da muss (MyTextBox Ereignisse) stehen bzw. ausgewählt werden.
    Bilder
    • MyTextBox.png

      19,19 kB, 869×267, 58 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    An beanbear6:

    Klappt jetzt alles oder gibt es noch Diskrepanzen diesbezüglich? Wenn man etwas eigenes erzeugt, muss das in der Regel auch instanziiert und dem Formular, auf dem es dann angezeigt werden soll, hinzugefügt werden (in der passenden Design-Datei kann man sich abgucken, wie der Designer das eine oder andere tut), bei Vererbung wäre z.B. DeineTextbox dann vom Typ TextBox (Mutterklasse), konstruieren oder bauen würde man sie aber mit der gewünschten Kindklasse, in diesem Fall als TextBoxEx - die Position und Abmessungen sind nur als Beispiel gedacht und wenn man die Textboxen dauerhaft auf einem Formular verwendet, würde ich die Deklaration mit dem Bauen (oder zumindest die Deklaration selbst) außerhalb von allen Subs machen, um einerseits eine Sicherheit für die Lebensdauer der erzeugten Objekte zu haben und andererseits nicht immer wieder Ressourcen für die Putzfrau (GarbageCollector) zu erzeugen:

    VB.NET-Quellcode

    1. Public WithEvents DeineTextBox As TextBox = New TextBoxEx() With {.Location = New Point(25, 25), .Width = 200, .Height = 50}
    2. (...)
    3. Me.Controls.Add(DeineTextBox)
    Das gleichzeitige Erscheinen von Dummheit und Unmündigkeit nach Immanuel Kant ist eines der schlimmsten Dinge, die einem Homo sapiens in geistiger Hinsicht widerfahren können, hat manchmal aber auch durchaus seine Vorteile.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Gregor Jasinski“ ()

    Hi zusammen, hm... ich kann das alles noch nicht ganz umsetzen, bin echt Neuling, hab auch immer wieder gegoogled, komm aber nicht ganz zurecht. Ich finde z.B. auch die mittlere Combobox (Screen von VaporiZed) nicht... Wenn es Euch nicht zu blöd wird, wär mir sehr geholfen, wenn ich da ne Anleitung Schritt für Schritt bekommen könnte. Außer es ist/wird Euch zu blöd mit mir, dann bin ich Euch auch nicht böse gelle :) Es ist ja auch nicht so, dass ich nicht recherchiere und mich reinkniee. Vielleicht macht sich jemand die Mühe, mich anzuleiten... :)
    Mit welcher Visual Studio-Version arbeitest Du?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also Anleitung:
    1. kopiere den Code aus post#3 in eine Datei - nenne die Datei am Besten so wie die Klasse heisst
      (tatsächlich denke ich, das hast du schon)
    2. kompiliere deine Solution
    3. Ziehe eine TextBoxEx aus der Toolbox aufs Form - oder besser noch zwei davon.
      Möglicherweise aktualisiert dein VisualStudio die Toolbox nicht sofort. Dann einmal schliessen und wieder öffnen.
    4. Starte deine Anwednung und siehe: funzt doch alles!
    Wenns bei einem der Schritte ein Problem gibt, sag bescheid.
    Hier der komplette Code aus den Beiträgen oben - alle drei Methoden funktionierten bei Tests, zwei davon sind hier auskommentiert, zum Testen einfach eine andere entkommentieren, die vorherige dann auskommentieren. Die mit MouseEvents funktioniert natürlich anders - wenn man mit der Maus drauf geht und nicht mit dem Focus.

    Edit: im Anhang noch ein Screenshot, wo man die TextBoxEx nicht per Code-Deklaration, sondern mit der ToolBox instanziiert (die Zeile mit .Add im Form1_LoadEvent und die darüber kann man sich dann sparen bzw. sollte sie nicht mehr einsetzen, weil das dann vom Designer automatisch gemacht wird)


    VB.NET-Quellcode

    1. Public WithEvents DeineTextBox As TextBox = New TextBoxEx() With {.Location = New Point(25, 25), .Width = 200, .Height = 50}
    2. 'Public WithEvents DeineTextBox As New TextBoxEx() With {.Location = New Point(25, 25), .Width = 200, .Height = 50}
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.Controls.Add(DeineTextBox)
    5. End Sub
    6. '-----TextBoxVererbung Test
    7. Public Class TextBoxEx : Inherits TextBox
    8. '(1)
    9. Private Sub TextBox_Enter(sender As Object, e As EventArgs) Handles Me.Enter
    10. Me.BackColor = Color.Red
    11. End Sub
    12. Private Sub TextBoxEx_Leave(sender As Object, e As EventArgs) Handles Me.Leave
    13. Me.BackColor = Color.LightGreen
    14. End Sub
    15. '(2)
    16. 'Protected Overrides Sub OnMouseEnter(e As EventArgs)
    17. 'BackColor = Color.Red
    18. 'MyBase.OnEnter(e)
    19. 'End Sub
    20. 'Protected Overrides Sub OnMouseLeave(e As EventArgs)
    21. 'BackColor = Color.LightGreen
    22. 'MyBase.OnLeave(e)
    23. 'End Sub
    24. '(3)
    25. 'Protected Overrides Sub OnGotFocus(e As EventArgs)
    26. 'BackColor = Color.Red
    27. 'MyBase.OnEnter(e)
    28. 'End Sub
    29. 'Protected Overrides Sub OnLostFocus(e As EventArgs)
    30. 'BackColor = Color.LightGreen
    31. 'MyBase.OnLeave(e)
    32. 'End Sub
    33. End Class
    Bilder
    • TextBoxEx.png

      152,19 kB, 1.680×1.050, 45 mal angesehen
    Das gleichzeitige Erscheinen von Dummheit und Unmündigkeit nach Immanuel Kant ist eines der schlimmsten Dinge, die einem Homo sapiens in geistiger Hinsicht widerfahren können, hat manchmal aber auch durchaus seine Vorteile.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Gregor Jasinski“ ()

    Hallo zusammen, also gleich mal herzlichen Dank für die vielen Hilfeposts... Ich werd mir das die nächsten Tage mal geben, das einzubauen und auch zu verstehen. Ich dank Euch allen für die tolle Hilfe!!! Vielen Dank nochmal... Ich melde mich. :) Viele Grüße beanbear
    @VaporiZed: Version guck ich am Montag auf Arbeit nach :)
    Dann sollten alle Posts relevant und anwendbar sein.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.