Form in TabControl kein Variablenzugriff

  • VB.NET

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

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

    Form in TabControl kein Variablenzugriff

    Neu

    Hallo,

    ich habe ein Problem mit dem Aufruf von Variablen und Methoden in einer Form, die in einem Tab platziert wurde.
    Rufe ich die Form als Form an sich auf, kann ich alle Public Variablen und Public Methoden von anderen Formen aus zugreifen.

    Sobald die Form jedoch mit folgendem Code in einem Tab platziert wird, werden die Variablen beim Aufruf der anderen Form zurückgesetzt und die Methoden können nicht aufgerufen werden.
    edit: Methoden können aufgerufen werden, laufen im Debugger durch aber es passiert nichts. Alles bleibt unverändert. Bsp. Textakualisierung lbl,

    VB.NET-Quellcode

    1. Dim hmiForm As New frmHmiConfig
    2. Dim hmiTab As New TabPage()
    3. hmiForm.TopLevel = False
    4. hmiForm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    5. hmiForm.Dock = DockStyle.Fill
    6. hmiForm.Show()
    7. hmiTab.Text = "HMI UserPage"
    8. hmiTab.Controls.Add(hmiForm)
    9. TabControl1.TabPages.Add(hmiTab)


    Hat jemand eine Idee, woran das liegen kann, bzw. wie ich das Problem am besten angehe?

    Viele Grüße,
    Michael

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

    Neu

    Aldi schrieb:

    Sobald die Form jedoch mit folgendem Code in einem Tab platziert wird, werden die Variablen beim Aufruf der anderen Form zurückgesetzt
    Was meinst du mit "beim Aufruf der anderen Form"?
    Kannst du den Code "zum Aufruf der anderen Form" zeigen?
    Welche Variablen werden zurückgesetzt? die auf der gezeigten hmiForm oder auf der anderen?

    Neu

    Wenn du die frmHmiConfig nicht außerhalb einer Methode deklariert hast, wäre das etwas, was geändert werden muss.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Neu

    @Aldi Willkommen im Forum. :thumbup:
    Offensichtlich willst Du die Form hmiForm auf dem TamControl anzeigen.
    Gib dieser Form mal Me als Parent: Finde SetParent() im Forum. ;)
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Neu

    Hallo,

    Vielen Dank für die Antworten.

    @RodFromGermany
    Genau so ist es. Ich möchte die Form hmiForm auf dem TabControl anzeigen.

    Leider habe ich das SetParent nicht hinbekommen. Entweder nicht verstanden, oder es funktioniert nicht.

    Zum Verständnis:
    Ich habe eine MDI Hauptform. In dieser Hauptform sitzt die Form Optionen, dessen Parent die Hauptform ist.
    Möchte ich der hmiForm die Form Optionen als Parent zuweisen funktioniert das nicht, weil Optionen kein "IsMdiContainer" ist.
    Umstellen kann ich es aber auch nicht, da die MDI Hauptform der "IsMdiContainer" ist.
    Ich habe testhalber versucht, die hmiForm direkt auf der MDI Hauptform anzuzeigen.

    Aktueller Stand:
    Die Variablen habe ich nun einfach in der MDI Hauptform als public deklariert. Nun habe ich vollen Zugriff darauf und sie werden nicht zurückgesetzt. :thumbup:
    Leider hatte ich trotzdem keinen Zugriff auf meine Methoden.

    Ich habe zum Verständis noch eine Skizze vom Aufbau angehängt.
    Die hmiForm sitzt in einem TabControl und beninhaltet die Methode reloadContent. Drücke ich den Button um diese Funktion aufzurufen funktioniert sie.
    Außerdem gibt es einen Button "edit". Edit öffnet eine neue Form. Diese Form beinhaltet den Aufruf hmiForm.reloadContent.
    Laut Debugger läuft alles durch, in Wirklichkeit passiert aber nichts.

    Ich hoffe, jetzt ist es ein wenig verständlicher.

    Viele Grüße,
    Michael

    /Vollzitat entfernt

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

    Neu

    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Neu

    Hallo,

    vielen Dank @RodFromGermany, das ist genau das, was ich die ganze Zeit gesucht habe. Hat mir im Grundverständnis zu Tabs sehr weitergeholfen.

    Leider besteht im aktuellen Fall das Problem weiterhin. Ich kann nicht wie in deinem Tut beschrieben alle auftretenden Fehler löschen, da die Zeilen benötigt werden.
    Bsp. das load Ereignis. Weiterhin kommt nun beim Aufruf einer Methode der Fehler "Der Verweis auf einen freigegebenen Member erfordert einen Objektverweis."
    Ich habe versucht, die Methode Public Shared zu machen, jedoch entstehen dadurch noch mehr Fehlermeldungen, mit denen ich nichts anfangen kann.

    *zu erwähnen ist außerdem, dass ich nicht alles grundlegend umbauen kann, da ich meinen Code in eine schon lange bestehende, umfangreiche TabControl einbauen muss.

    Hat denn noch jemand eine andere Idee?

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

    Neu

    Aldi schrieb:

    das load Ereignis
    musst Du durch ein äquivalentes Ereignis ersetzen, ggf. .Activate, sieh mal nach, was da hinpasst.

    Aldi schrieb:

    "Der Verweis auf einen freigegebenen Member erfordert einen Objektverweis."
    Da hast Du so was ähnliches stehen wie: ControlX.DoIt() und er will MyInstanceOfControl.DoIt()
    mit MyInstanceOfControl = New XControl().
    Ansonsten poste immer den Code zu einer Fehlermeldung, da lässt es sich viel besser helfen.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!