Announcement

Collapse
No announcement yet.

FORM .Dll dynamisch laden

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

  • FORM .Dll dynamisch laden

    hallo,

    habe ein Beispiel unter :

    http://msdn.microsoft.com/de-de/library/bb979409.aspx

    gefunden für das laden von Dynamischen laden von FORM in ein MDI-Fenster.

    Aber an der Stelle :

    ClassConfigValues = CType(ConfigurationSettings.GetConfig("availableclasses"), _
    Specialized.NameValueCollection)

    kommt die Meldung das dieser Befehl veraltet ist ???

    kann mir jemand helfen welcher Befehl und WIE anstat ConfigurationSettings.GetConfig geschrieben werden muss.

    DANKE

  • #2
    Hallo,

    wahrscheinlich ist damit gemeint, dass du anstelle von 'ConfigurationSettings' 'ConfigurationManager' verwenden und die Referenz auf 'System.Configuration' hinzufuegen solltest.
    *-- robert.oh. --*

    Comment


    • #3
      Geht irgendwie nicht ???

      hallo,

      danke für antwort

      irgendwie geht das nicht. Es reicht nicht das ich das so einfach austausche.

      Hat vielleicht jemand dieses Beispiel schon mal ausprobiert ??

      wenn ja kann mir jemand die veränderung im Quellcode sagen wie er es zum laufen bekommen hat.

      Danke im vorraus

      Comment


      • #4
        Hallo,

        dein Artikel stammt aus dem Jahr 2002 - das sind für .net die Urzeiten.

        Ein funktionierender Code ist:
        [highlight=c#]
        /// <summary>
        /// Erzeugt eine neue Instanz einer Form auf Basis des
        /// Klassennamens der Form (zB "Form1")
        /// </summary>
        /// <param name="FormName">
        /// Name des Formulars
        /// </param>
        /// <returns>
        /// Formularinstanz
        /// </returns>
        public static Form GetFormByName(string formName)
        {
        Form myForm = null;

        try
        {
        // Referenz auf die ausgeführte (diese) Assembly holen:
        System.Reflection.Assembly myAssembly =
        System.Reflection.Assembly.GetExecutingAssembly();

        // Formnamen in der Assembyl ermitteln:
        string fullName =
        myAssembly.GetType().Namespace + "." + formName;

        // Form instanzieren und Formvariable zuweisen:
        myForm = (Form)myAssembly.CreateInstance(fullName);
        }
        catch //(NullReferenceException ex)
        {
        // FormName existiert nicht - keine Reaktion zeigen
        }

        return myForm;
        }
        [/highlight]

        [highlight=vb.net]
        ''' <summary>
        ''' Erzeugt eine neue Instanz einer Form auf Basis des
        ''' Klassennamens der Form (zB "Form1")
        ''' </summary>
        ''' <param name="FormName">
        ''' Name des Formulars
        ''' </param>
        ''' <returns>
        ''' Formularinstanz
        ''' </returns>
        Public Shared Function GetFormByName(formName As String) As Form
        * * Dim myForm As Form = Nothing
        * *
        * * Try
        * * * * ' Referenz auf die ausgeführte (diese) Assembly holen:
        * * * * Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
        * * * *
        * * * * ' Formnamen in der Assembyl ermitteln:
        * * * * Dim fullName As String = myAssembly.GetType().Namespace + "." + formName
        * * * *
        * * * * ' Form instanzieren und Formvariable zuweisen:
        * * * * myForm = DirectCast(myAssembly.CreateInstance(fullName), Form)
        * * Catch'(NullReferenceException ex)
        * * * * * * ' FormName existiert nicht - keine Reaktion zeigen
        * * End Try
        * *
        * * Return myForm
        End Function
        [/highlight]

        mfG Gü
        Zuletzt editiert von gfoidl; 05.10.2008, 19:13.
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          FORM .Dll dynamisch laden

          hallo,

          erst mal Danke für Antwort :-)

          Jetzt habe ich 2 Dateien :
          1 Datei als START.EXE mit einem BUTTON auf einem Form.
          2 Datei als MASKEN.DLL mit einer Form Namens Form1

          Kannst du mir vielleicht sagen wie ich jetzt aus der Datei Masken.DLL die Form1 durch den Klick auf BUTTON in der START.EXE starten kann.

          Danke

          Comment


          • #6
            Hi,

            der Name des Formulars in MASKEN.DLL setzt sich aus dem Namespace + Formularname zusammen.

            Den Namespace brauch ich auch um dir sagen zu können wie du darauf zugreifst.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              hallo,

              der Namenspace ist MASKENPROJEKT1,
              der Name des Formulars ist FORM1.

              Danke für die Hilfe

              Comment


              • #8
                Hallo,

                C#
                [highlight=c#]
                private void button1_Click(object sender, EventArgs e)
                {
                try
                {
                // Absoluten Pfad zur Assembly ermitteln. Die MASKEN.dll
                // befindet sich im selben Pfad wie diese Assembly:
                string assemlbyPath =
                System.IO.Path.Combine(
                Application.StartupPath,
                "MASKEN.dll");

                // Laden der Assembly (anhand des Pfades):
                Assembly myAssembly = Assembly.LoadFile(assemlbyPath);

                // Name des Formulars in der Assembly:
                string formName = "MASKENPROJEKT1.Form1";

                // Instanz des Formulars erstellen:
                Form myForm = (Form)myAssembly.CreateInstance(formName);

                // Formular anzeigen:
                myForm.Show();
                }
                catch (Exception ex)
                {
                MessageBox.Show(ex.Message);
                }
                }
                [/highlight]

                VB.net
                [highlight=vb.net]
                Private Sub button1_Click(sender As Object, e As EventArgs)
                Try
                ' Absoluten Pfad zur Assembly ermitteln. Die MASKEN.dll
                ' befindet sich im selben Pfad wie diese Assembly:
                Dim assemlbyPath As String = System.IO.Path.Combine(Application.StartupPath, "MASKEN.dll")

                ' Laden der Assembly (anhand des Pfades):
                Dim myAssembly As Assembly = Assembly.LoadFile(assemlbyPath)

                ' Name des Formulars in der Assembly:
                Dim formName As String = "MASKENPROJEKT1.Form1"

                ' Instanz des Formulars erstellen:
                Dim myForm As Form = DirectCast(myAssembly.CreateInstance(formName), Form)

                ' Formular anzeigen:
                myForm.Show()
                Catch ex As Exception
                MessageBox.Show(ex.Message)
                End Try
                End Sub
                [/highlight]

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Danke

                  SUPER Danke

                  Mfg
                  Entwickler

                  Comment


                  • #10
                    Welche Sprache (C# oder VB.net) verwendest du eigentlich?
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Ich habe hierzu auch mal eine Frage:
                      Gibt es so pauschale Regeln, ab wann man Formulare in DLLs auslagern sollte? Ich entwickle eine Software für meinen Arbeitgeber, und mittlerweile sind da über 50 Forms drin. Die EXE ist über 3MB groß, Hauptspeicher wird eben je nach geöffneten Formularen verbraucht. Sind ein paar große (komplexe, datenreiche) auf, macht sich das schon bemerkbar.

                      Einerseits denke ich, dass es hilfreich sein kann, Formulare auszulagern. Vielleicht solche, die nur selten oder nur von einer Abteilung benutzt werden. Andererseits frage ich mich dann wieder, was es bringen soll, denn wird die DLL geladen, verbrauche ich denselben Speicher, und beim Start des Programms spielt es wohl nur eine untergeordnete Rolle, ob die Datei anderthalb oder drei MB groß ist. Zudem spare ich mir eventuelle Probleme mit der DLL und dem Handling und was weiß ich (wie gesagt, neues Terrain für mich).

                      Gibt es da so Daumenregeln, wie man hier am besten verfährt?

                      Danke für die Tipps ...

                      Dave

                      Comment


                      • #12
                        Hallo,

                        es gibt keine (mir bekannten) Regeln.

                        Die Antwort hast du dir selber gegeben:
                        beim Start des Programms spielt es wohl nur eine untergeordnete Rolle, ob die Datei anderthalb oder drei MB groß ist. Zudem spare ich mir eventuelle Probleme mit der DLL und dem Handling

                        Wenn mir eine Regel dazu einfallen müsste dann wäre das Model-View-Presenter.


                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment


                        • #13
                          Na gut, Danke für die Antwort. Dann werde ich das wohl erst einmal alles so beibehalten. Danke ...

                          Dave

                          Comment

                          Working...
                          X