Autor |
Beitrag |
Vegeto
      
Beiträge: 262
|
Verfasst: Fr 26.09.14 10:39
Hallo,
also ich weiß leider nicht wie ich das Thema nennen sollte.
Also ich baue eine unabhängige Dll, in der befindet sich eine GUI (form1). Diese Dll binde ich an die zweite GUI (form2). Nun möchte ich wenn man von form2, über die dll die form1 öffnet, dass sich form1 in einem selbständigen Thread öffnet.
Sobald die arbeiten an form1 fertig sind (natürlich kann der Benutzer weiterhin mit form2 arbeiten, da sich form1 in einem eigenen Thread befindet!), soll per Button (auf form1 -> btn_Ok, hat auch die Eigenschaft DialogResult.Ok) der Inhalt von der TextBox(form1-Dll) auf das Label von form2 angezeigt werden.
Das ist erst einmal ziemlich einfach gehalten, doch wenn ich wüsste, wie diese übergabe funktioniert, könnte ich den rest selbst realisieren.
Kann mir jemand ein Tipp oder ein gutes Tutorial dazu geben?
Lg
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 26.09.14 10:46
Öffne die Formen einfach nicht modal (aka Form.Show() anstatt Form.ShowDialog())?
Formen sind genauso Klassen wie alles andere auch insofern stehen dir zur Kommunikation dazwischen die gleichen Möglichkeiten zur Verfügung wie überall sonst auch.
Wenn z.B. Form2 irgendwas aus Form1 anzeigen soll dann gib Form1 eine Property (oder Methode) die von Form2 aus abfragbar ist. Wenn das zu beliebigen Zeitpunkt synchronisiert werden soll dann gib Form1 einen Event denn Form2 registrieren kann,
|
|
Vegeto 
      
Beiträge: 262
|
Verfasst: Fr 26.09.14 11:47
Hallo Ralf Jansen,
Wenn ich statt form1.ShowDialog() form1.Show() mache, dann springt die Form1 auf und schließt sich sofort.
Das mit dem Event hört sich interessant an, hast du vielleicht ein tutorial?
Lg
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 26.09.14 12:03
Zitat: | Wenn ich statt form1.ShowDialog() form1.Show() mache, dann springt die Form1 auf und schließt sich sofort. |
Dann hast du an deiner Form1 irgendwas kaputt gemacht.
Zitat: | Das mit dem Event hört sich interessant an, hast du vielleicht ein tutorial? |
Schau dir das simple Beispiel im Anhang an. Mit dem Button öffnest du eine 2.te Form. Was du in die Textbox der 2.ten Form eingibst taucht auch in der ersten auf.
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Vegeto
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 26.09.14 12:53
Hallo Vegeto,
für die Übergabe von Werten zwischen verschiedenen Forms habe ich einen Artikel verfasst (den ich schon öfters hier verlinkt habe): Kommunikation von 2 Forms.
|
|
Vegeto 
      
Beiträge: 262
|
Verfasst: Fr 26.09.14 12:54
Hallo Ralf Jansen,
danke für das kleine Tool, doch leider hilft es bei meinem Problem nicht, denn hier sind bei beide Forms in einem Projekt , und bei meinem Projekt soll die eine form von einer Dll angezeigt werden und dazu noch ein extra Thread bekommen.
Das heißt diese Forms sind unabhängig voneinander. Die Dll weiß gar nicht bei was für einem Code sie aufgerufen wird, deswegen kann ich in die Dll keine Übergabe realisieren.
Lg
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 26.09.14 13:37
Hallo Vegeto,
vergiss den Thread, denn WinForms-Controls dürfen nur in dem UI-Hauptthread laufen (sonst gibt es die entsprechende InvalidOperationException bzgl. threadübergreifender Zugriff auf UI-Elemente)!
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 26.09.14 13:43
Zitat: | Das heißt diese Forms sind unabhängig voneinander. |
Es ist in .Net vollkomenen egal in welcher Assembly die benutzten Klassen liegen. Die kann man immer in gleicher Weise benutzen. Du kannst in dem Projekt gerne die 2.te Form in eine ander Assembly (anderes Projekt) verschieben und diese Assembly dann referenzieren. Es wird sich am eigentlichen Code null komma nix ändern. Oder stößt du auf irgendwelche Probleme weil die Form Klasse ja gar nicht zu deinem Projekt gehört sondern aus der System.Windows.Forms.dll kommt?
|
|
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Fr 26.09.14 16:30
Hallo,
ich habe im Anhang ein Beispielprojekt. Einen seperaten Thread brauchst du nicht! Du kannst mehrere WinForms offen haben und trotzdem an allen arbeiten.
Einloggen, um Attachments anzusehen!
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|