WindowsForm aus DLL erstellen

03/11/2016 20:50 YatoDev#1
Kann mir jemand bitte beispielcode geben wie man eine Form aus einer konsolen anwendung oder dll erstellt? Ich hab vieles ausgetestet und mir nicht wirklich gemerkt was ich schon alles getestet habe.

STAThread Attribut gesetzt.
03/11/2016 22:24 Nanoxx™#2
Jemand hat mir mal gesagt WinForms aus .Net - DLL geht nicht....

Erstell eine Windows-Forms Anwendung und setz sie in den Einstellungen auf "Konsolenanwendung"

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]
03/12/2016 01:09 IceTrailer#3
Quote:
Originally Posted by Nanoxx[emoji769
;34121731]Jemand hat mir mal gesagt WinForms aus .Net - DLL geht nicht....

Erstell eine Windows-Forms Anwendung und setz sie in den Einstellungen auf "Konsolenanwendung"

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

Konsolenanwendung hat nichts mit der Ausgabedatei zu tun.

Und: Windows Forms Anwendung aus ner DLL ist sehr wohl möglich, dazu einfach ein neues Projekt (Bibliothek) erstellen und die Klasse Form hinzufügen sowie nach Belieben "bearbeiten"
03/12/2016 02:21 warfley#4
Quote:
Originally Posted by IceTrailer View Post
Konsolenanwendung hat nichts mit der Ausgabedatei zu tun.

Und: Windows Forms Anwendung aus ner DLL ist sehr wohl möglich, dazu einfach ein neues Projekt (Bibliothek) erstellen und die Klasse Form hinzufügen sowie nach Belieben "bearbeiten"
Aber aufgepasst damit, .Net ist eine Middleware die bei Forms Anwendungen die Kontrolle über den Mainthread übernimmt und nur noch Methoden via Event aufruft. Wenn man eine Form jetzt in eine Bibliothek packt, und diese Bibliothek wird dann von einer Software verwendet die nicht .Net für den Mainthread verwendet, oder gar ein anderes Framework, kann man sehr leicht auf die Nase fliegen, denn sagen wir mal, das eine Verwendet .Net, das andere ein beliebiges anderes mit ähnlicher Funktionalität, welches der Beiden Frameworks bekommt dann die Kontrolle?

Frameworks die die Kontrolle über die Anwendung übernehmen und nur noch Eventgesteuert arbeiten sind zwar extrem angenehm, aber mischen sollte man sie dennoch nicht.
03/12/2016 15:19 YatoDev#5
oh man da bekomm ich ein schritt für schriit tutorial mit bildern..... das habe ich nicht erwartet haha:D

Das problem daran ist was anderes
ich hab natürlich die form in meinem library projekt angelegt.
Nehmen wir mal an die funktion CreateForm würde diese dann "erstellen" und zurückgeben.
MeineForm form = new MeineForm();

nun wird die funktion nicht von vom main thread aufgerufen da habe ich mir halt gedacht erstelle ich einen neuen mit STAThread attribut. leider ohne erfolg.
Ich hab den thread auch versucht zu halten mit einer while schleife und einem sleep hat aber nichts gebracht.

Das programm stürzt ab ohne einen fehlercode oder was anderes auszugeben.

Ich hatte gehofft das hier vielleicht jemand schonmal eine form aus einem anderen thread erstellt hat.

Problembeschreibung im start post ist etwas mager ausgefallen ich weiß....

EDIT:
Mir geht es mehr darum wie ich das mit dem threading richtig machen muss nicht wie ich eine neue form erstelle
03/12/2016 18:56 warfley#6
Quote:
Originally Posted by »FlutterShy™ View Post
oh man da bekomm ich ein schritt für schriit tutorial mit bildern..... das habe ich nicht erwartet haha:D

Das problem daran ist was anderes
ich hab natürlich die form in meinem library projekt angelegt.
Nehmen wir mal an die funktion CreateForm würde diese dann "erstellen" und zurückgeben.
MeineForm form = new MeineForm();

nun wird die funktion nicht von vom main thread aufgerufen da habe ich mir halt gedacht erstelle ich einen neuen mit STAThread attribut. leider ohne erfolg.
Ich hab den thread auch versucht zu halten mit einer while schleife und einem sleep hat aber nichts gebracht.

Das programm stürzt ab ohne einen fehlercode oder was anderes auszugeben.

Ich hatte gehofft das hier vielleicht jemand schonmal eine form aus einem anderen thread erstellt hat.

Problembeschreibung im start post ist etwas mager ausgefallen ich weiß....

EDIT:
Mir geht es mehr darum wie ich das mit dem threading richtig machen muss nicht wie ich eine neue form erstelle
Du musst .Net natürlich noch mitteilen das auch für diesen Thread eine Message Queue abgearbeitet werden muss. Wie genau das geht, keine Ahnung aber schau dir mal die Application klasse an, die müsste das können
03/12/2016 20:15 YatoDev#7
Ich melde mich wenn ich das Problem gelöst habe.
Das mit der message queue: Das hat laut stackoverflow was mit dem STA thread attribut zu tun....

Naja wie gesagt wenn ich die lösung hab schreib ich hier die lösung
03/13/2016 17:02 Shawak#8
Code:
        [STAThread]
        static void Main()
        {
            new Thread(() =>
            {
                Application.ThreadException += Application_ThreadException;
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(start());
            })
            {
                IsBackground = true
            }.Start();

            while (true)
                Thread.Sleep(1);
        }

        static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
        {
            try { Application.Exit(); }
            catch {}
            Enviroment.Exit(0);
        }

        static Starter start()
        {
            return new Starter(() =>
            {
                var form = new DDLNamespace.Form()
                form.ShowDialog()
            });
        }

[..]

    class Starter : ApplicationContext
    {
        public Starter(Action action)
        {
            action();
        }
    }
Hoffe das hilft dir weiter, hier noch ein Beispiel: [Only registered and activated users can see links. Click Here To Register...] (Das sollte sich auch auf eine Form in einer DLL anwenden lassen)
03/13/2016 19:36 YatoDev#9
das sieht vielversprechend aus ich danke dir schonmal. ich werde es nachher testen und sagen obs geht.

EDIT: Hat mit deinem weg funktioniert