Forms wird nicht in OpenForms aufgelistet, wie komm ich dann da ran?

  • VB.NET
  • .NET (FX) 4.0

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

    Forms wird nicht in OpenForms aufgelistet, wie komm ich dann da ran?

    ausgelagert aus Form wird durch Application.OpenForms nicht erkannt ~VaporiZed

    Hi,

    Uralt. hoffe das ließt jemand. Hab das gleiche Problem.

    In My.Application.Openforms ist die Form nicht drin.

    Wollte das so lösen:

    VB.NET-Quellcode

    1. Dim myAssembly As [Assembly]
    2. myAssembly = [GetType]().Assembly
    3. For Each myType As Type In myAssembly.GetTypes
    4. If myType.IsClass Then
    5. If myType.Name = "Form_Name" Then
    6. Dim x = 0
    7. ' FROM WIRD GEFUNDEN
    8. ' WIE KANN ICH JETZT HIER AUF DIE FORM ZUGREIFEN????????????????????
    9. End If
    10. End If
    11. Next

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

    Oh, natürlich wird das gelesen. Zum Beispiel von der Moderation. Und die liest sowas gar nicht gerne, wenn jemand alte Threads für sein Problem kapert …

    Bevor ich das ganze wohl ohne Verweis auf das alte Thema abtrenne, weil es beim alten Thema darum ging, dass das Form mit OpenForms nicht gefunden wird (also ganz andere Herangehensweise): - erledigt

    Wozu Reflection und hast Du erfolgreich an einem Testprojekt getestet, ob das mit einem Standardform so überhaupt geht?
    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.

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

    Ja super. :D

    Ich habe eine Form die ich so aufrufe:

    VB.NET-Quellcode

    1. Dim f As DieseForm = New DieseForm()
    2. f.Show(Me)


    Und mit dem Code will ich darauf zugreifen:

    VB.NET-Quellcode

    1. For Each f As Form In My.Application.OpenForms
    2. If TypeOf f Is DieseForm Then
    3. For Each f2 As DieseForm In My.Application.OpenForms.OfType(Of DieseForm)()
    4. f2.TextBox1.Text = "BlaBla"
    5. Next
    6. End If
    7. Next


    Jetzt taucht diese aber nicht in Application.Openforms auf. Eigentlich meine ich das es zum Thema passt.
    Deswegen habe ich den unteren Code probiert. Der findet die Form schon.

    VB.NET-Quellcode

    1. Dim myAssembly As [Assembly]
    2. myAssembly = [GetType]().Assembly
    3. For Each myType As Type In myAssembly.GetTypes
    4. If myType.IsClass Then
    5. If myType.Name = "DieseForm" Then
    6. ' WIE KANN ICH JETZT AUF DIE FORM ZUGREIFEN????????????????????
    7. End If
    8. End If
    9. Next


    ich weis jetzt nur nicht wie ich von myType zur DieseForm komme?

    Wenn es eine Möglichkeit gibt, dann bitte :D , sonnst muss man das Thema von einer ganz anderen Seite angehen, welche zu diesem Thema definitiv nicht dazu passt. ;(


    Schöne Grüße
    Ok, sorry, hab ich falsch gelesen. Mit OpenForms geht's nicht, mit Reflection schon. Trotzdem zukünftig bitte keine alten Problem-Threads kapern, sondern unter Verweis auf das alte ein neues erstellen.
    Erstmal vorab: mach mal den OpenForms-Code einfacher und ohne My, also nur:

    VB.NET-Quellcode

    1. For Each Form In My.Application.OpenForms.OfType(Of Form2)
    2. f2.TextBox1.Text = "BlaBla"
    3. Next
    Ja, dieser Code reicht. Keine doppelte For-Schleife, kein If.
    In Post#11 steht ja schon was drin. Hast Du das beachtet? Ist das der Grund, warum es ggf. nicht klappt?

    ##########

    Das meiste scheint von den genannten Sachen behoben worden zu sein. Nur bei ShowInTaskbar = False scheint es noch Probleme zu geben. Hast Du das im Code gesetzt?

    ##########

    Nächste Frage: Wenn Du Dim f As DieseForm = New DieseForm() nutzt, warum verwendest Du dann nicht f, sondern willst das Form über OpenForms/Reflection einfacngen?
    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.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    DragsTrail schrieb:

    f.Show(Me)
    [...]
    Jetzt taucht diese {f} aber nicht in Application.Openforms auf.
    Da ist etwas faul.
    Ich kann mir nur vorstellen, dass du das Form zu schnell zugreifen willst, also wenn es noch nicht vollständig angezeigt ist.
    Ansonsten sollte es in Application.Openforms sein, bzw. du solltest erforschen, warum das normalerweise funktioniert, und in deim Spezialfall aber nicht.

    DragsTrail schrieb:

    Deswegen habe ich den unteren Code probiert. Der findet die Form schon.
    [...]
    ich weis jetzt nur nicht wie ich von myType zur DieseForm komme?
    Reflection findet den Typ der Form in der Assembly, aber ein Typ ist ja nur der Eigenschaften-Beschreiber eines Objekts - er ist nicht das Objekt selbst.
    Ich wüsste also nicht, wie du vom Typ auf dasjenige DieseForm-Objekt kommst, was du auffm Bildschirm schlussendlich zu sehen bekommst.
    @ErfinderDesRades

    Die Form wird komplett aufgebaut. 100%ig. An dem kann es nicht liegen. Ich habe andere Formen mit dieser verglichen und finde absolut keinen Unterschied.

    Hab z.B. das hier gefunden. Hier wird vom Typ eine neue Instanz des Typs erstellt, aber nicht die aktuelle reflektiert so zu sagen:

    Typen ermitteln und als neu deklarieren

    @VaporiZed

    Die Form ist in der Taskbar sichtbar. Ich rufe die Form wie oben beschrieben auf und gib dieser keine weiteren Eigenschaften mit.

    Zu deiner 2 Frage, warum nicht direkt f. verwenden. Weil der Zugriff aus einer Klasse erfolgen muss. So jetzt hab ich es gesagt und das wollte ich vermeiden weil es absolut nicht zum Thema passt. :D ;(
    Es wehre so einfach wenn die f. in Openforms einfach drin wehre.

    DragsTrail schrieb:

    So jetzt hab ich es gesagt und das wollte ich vermeiden weil es absolut nicht zum Thema passt.
    Hättest Du es nicht gesagt, würde sich nicht die Frage ergeben, warum Du an die Klasse nicht einfach f übergibst und es so direkt ansprichst.
    Informationszurückhaltung führt mehr Verwirrung ein und verlängert den Weg zu Lösung der eigentlich zu absolvierenden Aufgabe.
    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.
    @ErfinderDesRades

    Der Fehler ist aber nicht zu reproduzieren in einem neuen Projekt. Das ist ja der Wahnsinn. Mein Projekt hat mittlerweile über 500MB, wovon die Ressourcen nur knapp 12MB sind.
    Ich kann da jetzt nicht einfach neu anfangen. Wenn ich die besagte Form lösche und komplett neu anlege ( egal unter welchen Namen ) ist sie in Openforms drin. Füge ich dann
    den Code und die Controls ( GroupBoxes, Treeview, Buttons, Picterbox, Numericupdown ) ist aus die MAUS! Dann ist sie nicht mehr in Openforms drin.

    Am Anfang dachte ich es liegt vielleicht an den OpenGL 3D-Fenster. Das kann ich aber 100% ausschießen.

    @VaporiZed

    Hast ja Recht. Definitiv. Es wehre der einfachste Weg gewesen, wenn die Form in My.Applications.Openforms enthalten ist.

    Es ist nicht eine Klasse, das wehre schön. Es ist eine sehr verzwickte Angelegenheit. :) Sollte ich es nicht schaffen, mach ich ein neues Thema auf. Alleine schon die Situation mit den Klassen
    zu erklären ist eine Herausforderung. :-))))

    DragsTrail schrieb:

    Füge ich dann
    den Code und die Controls ( GroupBoxes, Treeview, Buttons, Picterbox, Numericupdown ) ist [...] sie nicht mehr in Openforms drin.

    Am Anfang dachte ich es liegt vielleicht an den OpenGL 3D-Fenster. Das kann ich aber 100% ausschießen.
    No, das täte ich denn aber auch nichtausschliessen.
    Jo, aber das ist doch ein Ansatz: Quasi binäre Suche: In reversiblen Schritten Controls zufügen/wegnehmen, um herauszufinden, an welchem Control/Schritt es im Einzelnen liegt.

    Mit einem Versions-ControlSystem (zB Git) wäre das einigermassen machbar - verwendest du eines?
    Wäre bei sonem Mammut-Teil eh höchst angeraten.