Auf Sub in einem Benutzersteuerelement zugreifen

  • VB.NET

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

    Auf Sub in einem Benutzersteuerelement zugreifen

    Guten Morgen,
    Bin gerade an einer appkikation inwelcher ich die Oberflächen (z.B Einstellungsmenü) in User Controls geschrieben habe und in der Haupform (Windows Forms) jeweils aufrufe.

    Nun möchte ich von der Hauptform auf ein Sub in einer User Control zugreifen. Public sub reicht anscheinend nicht. Kann man dies nicht einfach mit (beispiel)
    usercontrol1.EinstellungenLaden() machen?

    Dankeschön :)
    Wie rufst Du Dein UserControl denn auf?

    Ziehst Du es im Designer auf die Form oder machst Du das per Code...?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    MG6007 schrieb:

    usercontrol1.EinstellungenLaden()
    Was genau geht hier nicht?
    Wo steht dieser Aufruf?
    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!

    SpaceyX schrieb:

    Hey,

    zeig mal etwas mehr Code. Wie erzeugst Du denn die UserControls?


    [VB.NET] UserControl-based-Forms
    Habe es nach diesem tutorial gemacht, das hilft vielleicht weiter! Ist eigentlich genau so übernommen worden.


    Was genau geht hier nicht?
    Wo steht dieser Aufruf?


    Ich will von einem Usercontrol (uc_settings) die public Sub (settingsload) aufrufen (von der Hauptform aus).
    uc_settings.settingsload()

    mir kommt allerdings der Fehler -> Fehler: "settingsload" ist kein Member von "Mobile_devices_vb.uc_settings".

    MG6007 schrieb:

    Habe es nach diesem tutorial gemacht, das hilft vielleicht weiter! Ist eigentlich genau so übernommen worden.


    Ich hab aber nach Deinem Code gefragt, nicht nach dem Code, den Du abgekupfert hast.

    Der Fehlermeldung nach zu urteilen, ist settingsload nicht als Member in Deinem UserControl enthalten.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt

    Code von der Hauptform

    VB.NET-Quellcode

    1. #Region "Navigation"
    2. Public Enum content
    3. main = 0
    4. settings = 1
    5. End Enum
    6. Dim myUC As UserControl
    7. Sub changeUC(ByVal content As Object)
    8. changeContent(content)
    9. End Sub
    10. Sub changeContent(ByVal content As content)
    11. If Not myUC Is Nothing Then ' wenn nicht myUC Nichts
    12. Select Case myUC.Name
    13. Case "uc_main" ' wenn myUC.Name = "uc_main"
    14. RemoveHandler uc_main.changeUC, AddressOf changeUC ' lösche den Handler von uc_main auf changeUC
    15. End Select
    16. End If
    17. Select Case content
    18. Case Mainfrm.content.main ' wenn content = content.main
    19. myUC = New uc_main ' erstelle neues UserControl von uc_about
    20. myUC.Name = "uc_main" ' setze Namen
    21. AddHandler uc_main.changeUC, AddressOf changeUC ' erstelle Handler changeUC
    22. Case Mainfrm.content.settings ' wenn content = content.about
    23. myUC = New uc_settings ' erstelle neues UserControl von uc_about
    24. myUC.Name = "uc_settings" ' Namen setzen
    25. End Select
    26. ContentP.Controls.Clear() ' mainContent ist das Panel
    27. If myUC IsNot Nothing Then
    28. myUC.Dock = DockStyle.Fill ' fülle das Panel mit dem UserControl aus
    29. ContentP.Controls.Add(myUC) ' füge myUC dem mainContent hinzu
    30. End If
    31. End Sub
    32. #End Region
    33. Private Sub Mainfrm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    34. changeContent(Mainfrm.content.main)
    35. uc_settings.loadsettings()
    36. End Sub


    Code im User Control uc_settings

    VB.NET-Quellcode

    1. Public Class uc_settings
    2. Public Sub loadsettings()
    3. MsgBox("Die Funktion wurde aufgerufen!")
    4. End Sub
    5. End Class


    Danke für die Hilfe

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

    Setz mal auf

    VB.NET-Quellcode

    1. changeContent(Mainfrm.content.main)
    einen Haltepunkt und überprüfe, ob es so abläuft, wie Du glaubst, dass es laufen sollte.
    Was sagt Dein Code zu Option Strict On :?:
    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!
    Huhu,

    der Grund, warum es nicht lauft, ist weil Du keine Instanz Deines uc_settings hast. Du greifst nicht auf eine Variable, sondern auf die Klasse zu. Verstehst Du, was ich meine? Es wird nirgendwo ein Objekt des Typs uc_settings erzeugt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ein UserControl ist allerdings ein GUI-Element, das nach dem Kompilieren einfach auf die Form gezogen werden kann und dann da ist.
    Das WithEvents hat mit settingsload nix zu tun, denn es ist eine schnöde Prozedur.
    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!

    RodFromGermany schrieb:

    Ein UserControl ist allerdings ein GUI-Element, das nach dem Kompilieren einfach auf die Form gezogen werden kann und dann da ist.
    Das WithEvents hat mit settingsload nix zu tun, denn es ist eine schnöde Prozedur.

    Wie wäre denn die "schönere Methode" davon?

    Und noch eine frage, ich habe in der Settingsload-Sub folgenden Code (als Beispiel)

    label1.text = "test",

    Aber das label zeigt trotzdem den gleichen Wert wie vorhin an, aber wenn man die Eigenschaft mit z.B

    msgbox(label1.text) abfragt, erscheint der Wert "test", habt ihr eine Idee an was das liegen könnte?

    MG6007 schrieb:

    Wie wäre denn die "schönere Methode" davon?
    Im Designer anlegen, da musst Du Dich um nix kümmern.
    Bei dem Label1 hast Du wahrscheinlich einen systematischen Fehler. Da müsstest Du mal den Code zeigen.
    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!