Event in selbst erstelltem Steuerelement

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

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

    Event in selbst erstelltem Steuerelement

    Hallo,
    ich habe in VB ein Benutzerstelerelement selbst erstellt, mit 3 Textboxen die ich immer zusammenhängend verwenden möchte.
    Nun fehlt mir aber die Möglichkeit darauf zu reagieren wenn die Werte durch einen User geändert wurden. Also eine Art ".Change" Event.

    Kennt jemand eine Möglichkeit dieses Event zu erstellen / verknüpfen?

    Ich möchte dann mein Steuerelement Platzieren und und unter den Ereignissen eine art TextChanged Event haben das in Verbindung mit den einzelnen TextChanged Events der 3 Textboxen steht.
    Natürlich reicht mir ein Denkanstoß und ich möchte keinen riesigen Code :D

    Danke schon mal,
    Felix
    @modellbusse ;) Im Event, das Dein Contrrol im UserControl auslöst, reichst Du Dein eigenes Event an den Abonenten des UserControl-Events weiter.
    Das ist jeweils ein Einzeiler.
    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!
    Was es für ein Element ist, ist kein Geheimnis. Es handelt sich um Eingabefelder für 3D-Koordinaten und das Problem war nicht das Abonnieren, sondern das Erstellen des Eventhandlers.

    Aber ich habe die Lösung im Tutorial von @ErfinderDesRades gefunden. (Im Video wäre ein kurzer Blick auf den Inhalt der Monoflob.vb cool gewesen um zu sehen was dort aufgerufen wird -> Steht ja aber im Text-Tutorial)

    Im Steuerelement sieht es so aus (Public Event und RaiseEvent waren hier die Dinge die mir hier gefehlt haben):

    VB.NET-Quellcode

    1. Public Event Changed As EventHandler
    2. Private Sub TBX_TextChanged(sender As Object, e As EventArgs) Handles TBX.TextChanged
    3. If IsNumeric(sender.Text) Then
    4. RaiseEvent Changed(Me, EventArgs.Empty)
    5. End If
    6. Private Sub TBY_TextChanged(sender As Object, e As EventArgs) Handles TBY.TextChanged
    7. If IsNumeric(sender.Text) Then
    8. RaiseEvent Changed(Me, EventArgs.Empty)
    9. End If
    10. Private Sub TBZ_TextChanged(sender As Object, e As EventArgs) Handles TBZ.TextChanged
    11. If IsNumeric(sender.Text) Then
    12. RaiseEvent Changed(Me, EventArgs.Empty)
    13. End If


    Und dann in der Form:

    VB.NET-Quellcode

    1. Private Sub PSPos_Changed(sender As Object, e As EventArgs) Handles PSPos.Changed
    2. MsgBox(PSPos.X & " " & PSPos.Y & " " & PSPos.Z)
    3. End Sub


    Danke für eure schnelle Hilfe, denn ich wusste echt nicht mehr was ich noch googlen soll.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „modellbusse ;)“ ()

    Uah. Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.
    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.
    Puh, bei Option Scrict habe ich direkt mal 228 Fehler auf 3.000 Zeilen obwohl ich mich immer darum bemüht habe Typenpassend zu programmieren, aber danke für den Tipp.

    Leider klappt das nicht für die Komplette Anwendung, da einige Variablen verschiedene Typen annehmen, bzw. einige Funktionen in verschiedenen Typen zurückgeben müssen um nicht alles 8x zu programmieren. (-> Also muss ich das nach der Beseitigung der meisten Unstimmigkeiten wieder raus nehmen)
    nein - sauber programmieren, no excuses.
    knifflige Probleme kannste hier ja diskutieren - solch kann einen sehr voranbringen.

    Sollte wirklich ein unlösbares Problem auftreten, so sollte man spezielle "SchmuddelCode-Files" anlegen - das ist in jedem Falle möglich.
    Aber da müssteste mich erst überzeugen, dass da bei dir eine solche Notwendigkeit vorliegt.

    Übrigens, dass bei dir 228 Fehler auftreten zeigt ja, wieviel du knowhow-mässig profitieren würdest, wennde das glattziehst.
    @ErfinderDesRades Jou.
    @modellbusse ;) Wennde das nich tust, wird die Hilfsbereitschaft Dir gegenüber hier im Forum einbrechen.
    =====
    Du kannst zunächst einfach jede Quelldatei einzeln auf Option Strict On umstellen, indem Du dies in die erste Codezeile schreibst.
    Dann korrigierst Du Deinen Code.
    Wenn dies fertig ist, nimmst Du die nächste Datei usw.
    Bei einem neuen Projekt solltest Du unbedingt im Projekt Strict On aktiviert haben, da schreibst Du sofort saubereren Code. :thumbup:
    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!

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

    Ich will mich auch gar nicht dagegen wehren (schade dass Visual Studio das nicht gleich richtig macht) denn ihr habt ja Recht.

    Dann stehe ich schon direkt vor vielen kleinen Problemen die mir gestern noch gar nicht so bewusst waren. Ich schätze mal so 100 Fehler bekomme ich locker weg, aber:

    Was mache ich zum Beispiel in solchen Fällen? Das oberste hatte ich vorher, das danach war mein Versuch das gerade zu biegen, aber beides will er nicht.

    VB.NET-Quellcode

    1. LBSelectedMesh.Text = LBMeshes.SelectedItem
    2. LBSelectedMesh.Text = LBMeshes.Items(LBMeshes.SelectedIndex).Text


    Allgemein bekomme ich mit Option Strict On nix mehr aus Listboxen heraus? Dann muss ich mir irgendwo anders nochmal den Inhalt speichern und über den .SelectedIndex die Extraliste auslesen?

    Es gibt natürlich noch mehr Dinge zu lösen, aber ich fange mal klein an :)

    Und schonmal Danke für eure Unterstützung!
    @modellbusse ;) SelectedItem ist vom Typ Object. Machst Du LBMeshes.SelectedItem.ToString()
    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!