Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Daten an an eine anderen Forms-Anwendung übergeben und später Ergebnisse abholen
PES 4ever
myCSharp.de - Member

Avatar #avatar-3378.png


Dabei seit:
Beiträge: 46
Herkunft: Österreich

Themenstarter:

Daten an an eine anderen Forms-Anwendung übergeben und später Ergebnisse abholen

beantworten | zitieren | melden

Hallo!

Ich habe eine Frage bezüglich SendKeys. Ich habe mich im Forum schon umgesehen und habe vieles gefunden. Die Suchfunktion kann ja sehr hilfreich sein.

Nun habe ich eine spezielle Frage für meine Anwendung.
  • Ich habe meine WinForm, die verschiedene Zahlen generiert. Die Zahlen können Primzahlen, Zahlen aus der 3er Reihe, usw. sein.
  • Das zweite Programm berechnet dann mit diesen Zahlen, die per SendKeys an das Rechenprogramm gesendet werden, verschiedene Ergebnisse.
  • Das Rechenprogramm gibt die Ergebnisse und den Rechengang dann in eine ListBox.
  • Jedes mal wenn ein Ergebnis in die ListBox eingefügt wird, kommt eine MessageBox.
  • Wenn genug Ergebnisse vorhanden sind, dann kommt keine MessageBox mehr.

Ich sende die Zahlen mit "SendKeys.Send(zahl);". Nun möchte ich das meine WinForm die Zahl an das Rechenprogramm gibt, dann auf die MessageBox wartet, OK drückt und dann den nächsten Wert versendet. Wenn die MessageBox nicht mehr erscheint, soll mein Programm stoppen.

Wie realisiert man so was?

Danke im Vorraus!

MFG PES 4ever
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo PES 4ever,
Zitat
Wie realisiert man so was?

Nicht mit SendKeys ;-)

Als Alternative würde ich vorschlagen, dass Du Remoting verwendest, wenn Du mit .Net 3.x arbeitest, dann WCF/Remoting. Das ist meines Erachtens der beste Weg zwischen 2 .Net Programmen innerhalb des lokalen Netzwerkes zu kommunizieren. Alternativ kannst Du auch eine herkömmliche Client/Server Verbindung via TCP/IP aufbauen.

Remoting hat den Charme, dass man geteilte Objekte hat, bei dem es möglich ist auf Events zu reagieren. Realisiert werden kann Dein Szenario dann so:

- Rechenprogramm ist Server und managed das Remoting-Objekt
- WinForm verbindet sich mit dem Remoting-Objekt
- WinForm generiert Zahl und ruft Methode des Remoting-Objektes auf
- Remoting-Objekt übermittelt die Zahl an das Rechenprogramm und wartet auf Benutzereingabe
- WinForm bekommt erst dann wieder ein Signal, sobald die Methode auf dem Remote-Objekt sich zurückmeldet.

Wie Remoting funktioniert kannst Du mittels der Boardsuche finden. Es gibt hier zahlreiche Beispiele hierfür.

Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers
PES 4ever
myCSharp.de - Member

Avatar #avatar-3378.png


Dabei seit:
Beiträge: 46
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Erstmal Danke! Werde ich mir mal ansehen.

Gibt es mit SendKeys keine Lösung das zu realisieren. Gibt es keinen Befehl der erkennt das eine MessageBox geöffnet wurde?

SendKeys kann ja auch Tastendrücke versenden, oder?
Zum Beispiel "SendKeys.Send("%({F4})");".

Kann man so nicht auf die MessageBox reagieren (mit Enter)?

MFG PES 4ever
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von PES 4ever am .
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo PES 4ever,

SendKeys ist nicht State-Of-The-Art. Es könnte auch sein, dass bei entsprechender Prozessorauslastung SendKeys verloren gehen. Deshalb sollte man hiervon abraten.

Ich kapier aber noch nicht, dass eine MessageBox bei jedem neuen ListBox-Eintrag aufpoppt, und ein Stopp-Signal dadurch gekennzeichnet wird, dass keine MessageBox mehr aufpoppt. Das ist doch irgendwie verkehrt herum.

Kannst Du die Logik nicht einfach umdrehen: So lange ListBox Einträge zulassen, bis genügend Zahlen vorhanden sind und dann die MessageBox aufpoppen lassen?

Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers
PES 4ever
myCSharp.de - Member

Avatar #avatar-3378.png


Dabei seit:
Beiträge: 46
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

OK! Vielen Dank norman_timo!

Ich werde mir mal das mit dem Remoting anschauen und wenn ich noch Fragen habe, werde ich sie hier posten.

Das wegen der MessageBox ist nur momentan so, dass sie jedes Mal erscheint, wenn es einen Eintrag gibt. Das war nur zu Testzwecken. Grund war der, um nach zu sehen, ob der errechnete Wert stimmt.

Andersrum ist es natürlich besser und ergibt mehr Sinn. Das werde ich noch ändern.

MFG PES 4ever
[B]EDIT:[/B] Noch ne Frage und zwar:
Wenn ich SendKeys doch verwende und wir nehmen an, dass die CPU-Auslastung nicht zu hoch ist.
Gibt es überhaupt einen Befehl, der erkennt, ob eine MessageBox eines anderen Programms offen bzw. erschienen ist?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von PES 4ever am .
private Nachricht | Beiträge des Benutzers
jaensen
myCSharp.de - Experte

Avatar #avatar-2657.png


Dabei seit:
Beiträge: 2.760
Herkunft: München

beantworten | zitieren | melden

Zitat
Wenn ich SendKeys doch verwende und wir nehmen an, dass die CPU-Auslastung nicht zu hoch ist. Gibt es überhaupt einen Befehl, der erkennt, ob eine MessageBox eines anderen Programms offen bzw. erschienen ist?
Hmm... mal abgesehen davon das du das nicht willst hier etwas falls du es doch willst: System-Event --> NewWindowOpened
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo PES 4ever,

wenn du beide Anwendungen selber schreibst, dann vergiss unbedingt SendKey und das Erkennen der MessageBox. Das ist Mist und nur eine Notlösung, wenn eine der Anwendungen fest vorgegeben ist und es partout keinen anderen Weg der Kommunikation gibt.

herbivore
private Nachricht | Beiträge des Benutzers
PES 4ever
myCSharp.de - Member

Avatar #avatar-3378.png


Dabei seit:
Beiträge: 46
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

OK! Vielen Dank für eure Hilfe!

Ich habe beide Programme selber geschrieben und werde sie auch vereinen, was natürlich sinnvoller ist.
Aber ich wollte einfach mal probieren, wie es anders geht. Denn bei manchen anderen Projekten kann ich das gut gebrauchen.

MFG PES 4ever
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo PES 4ever,
Zitat
Aber ich wollte einfach mal probieren, wie es anders geht.
Stichwort ist Interprozesskommunikation. Da gibt es eine ganze Reihe von unterschiedlichen Möglichkeiten.

herbivore
private Nachricht | Beiträge des Benutzers
Christoph Burgdorf
myCSharp.de - Member

Avatar #avatar-2915.jpg


Dabei seit:
Beiträge: 365
Herkunft: Hannover

beantworten | zitieren | melden

Hallo PES 4ever,

vielleicht ist das ein guter Zeitpunkt mal auf meinen NotificationService hinzuweisen. Klingt vielleicht ein wenig überdimensioniert, aber falls du dich ohnehin mit Remoting und Events beschäftigen möchtest, empfehle ich dir den Thread mal zu lesen.

NotificationService als Erweiterung zu Rainbirds ApplikationServer Beispiel

Gruß

Christoph
private Nachricht | Beiträge des Benutzers