Announcement

Collapse
No announcement yet.

Fehler beim dymnamischen generieren eines Formulars

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler beim dymnamischen generieren eines Formulars

    Hallo,

    ich muss zur Laufzeit ein Formular in VB.NET generieren. Das funktioniert soweit alles wunderbar, das Formular sieht genauso aus wie gewünscht und die Funktionalität ist gewährleistet.
    Wenn ich aber dieses Formular starte und auf das X cklicke und dann das Formular nochmal starten möchte, erhalte ich folgende Fehlermeldung.

    HTML Code:
    <b>Auf das verworfene Objekt "FormularSignieren" kann nicht zugegriffen werden.
    Objektname: "FormularSignieren".</b>
    Wenn ich aber die Funktion des Formular ganz normal über den Button ausführe , kann ich es beliebig oft starten. Kann mir jemand sagen, woran es liegt??


    Gruß

    Alaska


    Code:
     'MME: Diese Funktion baut das Formular zusammen
        Private Function baueFormular()
            Me.Text = "Rolle des Unterzeichners"
            Me.Visible = True
            Dim zaehler As Integer = 0
            Dim innenzaehler As Integer = 0
            Dim anzahl As Integer = 0
    
            For zaehler = 0 To UBound(konfiguration.SignierenUnterzeichnerrollen)
    
                anzahl = Me.addLabel(konfiguration.SignierenUnterzeichnerrollen(zaehler), innenzaehler)
                Me.addRadio(konfiguration.SignierenUnterzeichnerrollen(zaehler + 1), innenzaehler + 1)
                zaehler = zaehler + 1
                innenzaehler = innenzaehler + 2
            Next
            Me.Controls.Add(New System.Windows.Forms.Button)
            Me.Controls.Item(anzahl + 2).Text = "Signieren"
            Me.Controls.Item(anzahl + 2).Name = "cmdSignieren"
            
            AddHandler Me.Controls.Item(anzahl + 2).Click, AddressOf signieren
        End Function

  • #2
    Hallo,

    das Problem liegt nicht im Formular selbst (also in dem zitierten Code), sondern höchstwahrscheinlich im rufenden Formular. Wenn Du nochmals auf die Variable FormularSignieren zugreifen willst, aber das Formular schon geschlossen wurde, greifst Du natürlich ins Leere.

    Denkbare Lösung: Im Closed-Ereignis des Formulars die Variable im rufenden Formular auf null setzen. (Dazu muss ein EventHandler vom rufenden Formular an das "abhängige" Formular übergeben werden.)

    Andere denkbare Lösungen: Das "abhängige" Formular wird nur per ShowDialog() geöffnet. Dieses Formular wird in einen Using-Block gekapselt, ist also zwangsläufig nur innerhalb dieses Blocks gültig.

    Genauere Antwort ist nur mit dem passenden Code-Ausschnitt möglich.

    Gruß Jürgen

    Comment


    • #3
      Hier der Gersamte Code, der etwas mit dem Formular zu tun hat.



      So mehr Code habe ich nicht, der auf das Dokument zugreift. Nur noch den Oben, hilft Dir das weiter??
      Zuletzt editiert von alaska94; 21.04.2008, 10:52.

      Comment


      • #4
        Originally posted by alaska94 View Post
        ...hilft Dir das weiter??
        Nein, leider nicht; das liegt aber an meinen fehlenden VB-Kenntnissen und der Tatsache, dass Du mit dem E4ELA.Plugin arbeitest (was mir gar nichts sagt).

        Ich muss mich deshalb (abschließend) auf folgende Hinweise beschränken: Wie wirkt sich die Abfrage "If features = features.SingleObject" aus, wenn das Formular schon erzeugt ist oder wenn es durch "X" geschlossen wurde (vielleicht kann der Debugger darüber Auskunft geben)? "baueFormular" ist doch als Funktion deklariert, aber wirklich ohne Rückgabewert? Wird die Tatsache, dass das Formular aufgebaut wurde, irgendwo registriert?

        Schade, dass ich nicht weiterhelfen konnte. Wahrscheinlich ist mein voriger Hinweis mit dem Closed-Ereignis am sinnvollsten; allerdings kann ich nicht sehen, was dann auf welchen Wert gesetzt werden sollte.

        Jürgen

        Comment


        • #5
          So das Problem ist behoben ich habe jetzt einen Button hinzugefügt, der das Formular auf Visible=false setzt. Sollte das Formular erneut aufgerufen werden, wird einfach nur das Formular auf Visible = True gesetzt.

          Gruß

          Comment


          • #6
            Und wenn der Anwender Alt+F4 drückt? Besser das Schließen im OnClosing mit einem zusätzlichen e.Cancel verhindern.
            Schöne Grüße, Mario

            Comment


            • #7
              Und dazu kann man meinen Vorschlag abwandeln: Im FormClosing-Ereignis wird Visible auf false gesetzt und e.Cancel auf true; dann muss aber zusätzlich geprüft werden, ob gerade die Anwendung geschlossen wird. (Dann kann der zusätzliche Button wieder entfernt werden.)

              Jürgen

              Comment

              Working...
              X