Von einer Klasse auf eine bereits geöffnete Form zugreifen
- C#
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von DosiSoft.
-
-
-
Ich nutze eine Klasse zum Verwalten von Screenshots.
Innerhalb dieser Klasse werden die Screenshots auch per POST Request hochgeladen.
Nun habe ich einen Backgroundworker verwendet, um den Upload durchzuführen.
Nach Beendigung des Uploads möchte ich nun das Standardformular, das stets geöffnet bleibt, zum Anzeigen des Screenshots verwenden.
-
Dann solltest Du eventbasiert arbeiten oder auch taskbasiert, je nachdem. Heißt Deine ursprüngliche Form lädt das Bild mit der Klasse hoch und sobald das Ganze fertig ist, wird ein Event gefeuert, das Du abonnieren kannst und dann öffnest Du im Handler diese neue Form.
Wenn Du das taskbasiert implementierst, kannste den Aufruf einfach awaiten.
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
Trade schrieb:
und dann öffnest Du im Handler diese neue Form.
Er soll ja eben keine neue Form öffnen, sondern auf das bereits geöffnete Standardformular und seine Controls zugreifen. Oder habe ich da etwas missverstanden? -
-
-
Dann ist das Ganze ja noch einfacher und Du kannst direkt in der Form-Routine, nach dem Funktionsaufruf für das Hochladen, entsprechend auf die Controls zugreifen.
Grüße
#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
-
Trade schrieb:
Dann solltest Du eventbasiert arbeiten oder auch taskbasiert, je nachdem.
BackgroundWorker wäre wohl eventbasiert: msdn.microsoft.com/de-de/libra…rcompleted(v=vs.110).aspx
Ist allerdings nicht mehr das Neueste, was Microsoft heutzutage so anzubieten hat. Neu wäre wie gesagt das TAP mittelsTask
,Async
undAwait
.
Grüße
#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
Dann müsste der Worker aber auch in der Formularklasse untergebracht werden, oder?
Wäre es nicht auch irgendwie möglich, die Formularinstanz der Klasse zu übergeben, sodass ich auf diese dort zugreifen könnte?
Weil wenn ich den Worker nun samt Uploadprozess im Hauptformular unterbringen müsste, müsste ich zu viel ändern.
-
Nur die Form selber sollte Zugriff auf sich haben und Dinge erledigen. Da müsstest Du halt ein eigenes Event basteln und dieses abonnieren. Im
RunWorkerCompleted
feuerst Du das dann halt einfach.
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
-
-
Also folgendermaßen? So habe ich es jedenfalls durch Recherchen, wie man Events abonniert, herausgearbeitet.
Test wäre die Funktion im Formular, die das Bild dann anzeigen lassen soll und UploadWorkerCompleted die Funktion, die in der Klasse gefeuert wird.
Allerdings zeigt das einen Fehler an:
Fehler 3 'UploadWorkerCompleted' ist 'Methodengruppe', daher ist die Zuordnung nicht möglich.
-
Jo, den
RunWorkerCompletedEventHandler
kannst Du auch weglassen.
Wie ist dennUploadWorkerCompleted
deklariert?
Grüße
#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
Erstmal danke, dass du mir hier die ganze Zeit hilfst.
//Edit
Okay,. ich habe mir den Fehler nach ausreichendem Schlaf noch einmal angeschaut und ihn behoben.
Form:
Danke für deine Hilfe.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „DosiSoft“ ()
-
Der letzte Post würde zu unübersichtlich, daher mache ich jetzt einfach mal auf gut Glück einen Doppelpost. Ich hoffe, er kann der Übersicht halber so stehen bleiben.
-----
So, das anfängliche Problem ist eigentlich gelöst, jedoch habe ich aktuell ein ähnliches Problem, bei dem ich nicht weiter weiß.
Ich habe die bereits erwähnte Standardform. Innerhalb dieser wird eine weitere Form aufgerufen, die maximized ist und den kompletten Desktop als Screenshot anzeigt. Der Nutzer ist bereits in der Lage, einen Bereich mit der Maus auszuwählen und diesen hochzuladen.
Dazu wird im Mouseup Event der Bereichsscreenshot gespeichert und hochgeladen, wozu aus der zweiten Form wieder die Screenshotklasse aufgerufen wird.
Nun möchte ich von der Standardform über die Screenshotform auf die Screenshotklasse und anschließend auf das RunWorkerCompleted Event zugreifen.
Dazu sieht der Code der Standardform wie folgt aus:
C#-Quellcode
Jetzt ist das Komische jedoch, dass die letzte Zeile des Codes (das Eventabo) das Anzeigen des Screenshots in der ScreenshotForm verhindert. Wenn ich es wegmache, funktioniert alles wieder wunderbar.
Habt ihr eine Idee?
-
Deine Architektur ist nicht OOP-gerecht.
DosiSoft schrieb:
screenshotForm.pbScreenshot.Image = takenScreenshot;private
sein. Dasselbe trifft auch auf den BGW zu.
Und ohne den Code der FormScreenshot
wird es schwer, den Fehler zu finden. Das hängt ja meistens zusammen, zumal nicht klar ist, wastakeScreenshot
ist.
Wie gesagt, die Architektur muss verbessert/verändert werden, aber dazu muss erstmal der ganze Code ersichtlich sein.
Außerdem solltest Du Deine Bitmaps ordentlich freigeben, sonst entstehen Speicherlecks.
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
Ich glaube, ich habe zu viel falsch gemacht, als dass Code noch hilfreich wäre.
Wie würdest du denn vorgehen? Ich weiß mittlerweile echt nicht mehr, wie ich da vorgehen soll, sodass es passt.
Es soll im Grunde von der Standardform eine Form aufgerufen werden, die den Screenshot anzeigt und in der ein Bereich ausgewählt werden kann. Dieser soll dann mittels der Klasse hochgeladen werden und in der Standardform soll der Screenshot dann angezeigt werden.
-
Ähnliche Themen