Toon posts:

[C#] Probleem met meerdere forms (windows)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer het voor elkaar te krijgen om meerdere forms (apart) te runnen onder een programma.

Voorbeeld;
Er zijn 2 forms, de main en de gemaakte (deze wordt gemaakt door de main).

Ik start m'n main form, die runt netjes. Dan maakt ie de gemaakte form. Hier gaat het fout, want de gemaakte form is nog steeds afhankelijk van de main form. Wat hier gebeurt namelijk is dat de thread die de events van de main form afhandelt ook die van de gemaakte form afhandelt. Dit wil ik niet, ik wil dat ze alletwee apart hun events afhandelen.

Ik heb al geprobeert om de nieuwe form in een aparte thread aan te maken, maar helaas; de thread loopt af nadat deze de Constructor heeft doorlopen.

Iemand een oplossing?

Verwijderd

je moet bij form1 de Disposed event effe changen zodat tie de applicatie zelf niet sluit
zorg dan wel voor een check dat als allebei de forms er niet meer zijn dat tie dan wel sluit dit moet je ook doen bij form2

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 09 July 2003 @ 23:59:
Ik probeer het voor elkaar te krijgen om meerdere forms (apart) te runnen onder een programma.

Voorbeeld;
Er zijn 2 forms, de main en de gemaakte (deze wordt gemaakt door de main).

Ik start m'n main form, die runt netjes. Dan maakt ie de gemaakte form. Hier gaat het fout, want de gemaakte form is nog steeds afhankelijk van de main form. Wat hier gebeurt namelijk is dat de thread die de events van de main form afhandelt ook die van de gemaakte form afhandelt. Dit wil ik niet, ik wil dat ze alletwee apart hun events afhandelen.
Dit is onzin, want er is altijd maar 1 form 'active'. Als je beide forms start met 'null' als parent zullen de event handlers achter de forms de events afhandelen van bv button clicks. Er is echter 1 GUI thread, want je start je app waarschijnlijk met een STA attribute op de main method.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Hij bedoelt gewoon dat als hij 2 forms heb voor het gemak form1 en form2 dat als hij form1 aanmaakt in main()
Java:
1
Application.Run(new Form1());


en dat door een button event oid form2 up popped
nu is het geval als je form1 sluit deze meteen de application afsluit
dan moet je de dispose event aanpassen zodat tie niet meteen alles afsluit
en dan als allebei de forms gesloten zijn Application.Exit() aanroepen

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Het is toch logisch dat , als Form1 afgesloten wordt, form2 ook afgesloten wordt. Form1 is nl. de owner van form2.
Als je dat niet wilt, dan kan je de owner van form2 aanpassen.

Verder vind ik de topicstart nogal wazig...

https://fgheysels.github.io/


Verwijderd

Topicstarter
't probleem is dit.

Ik ben een MSN client aan het schrijven (wat overigens geen makkelijke taak is).
MSN werkt met zogenaamde 'switchboards'. Als je wilt chatten met een andere persoon, moet je een nieuwe connectie maken met een 'switchboard' server die de berichten doorstuurt naar de andere partij.

Nu is dus het probleem, als ik een bericht ontvang dan open ik een nieuwe form met een aparte listener thread (die ik aanmaak in de constructor).
Helaas blijft dit form wit en verschijnt er niks als ik hem op de gebruikelijke manier aanmaak:
code:
1
Form form = new switchboard(constructor geblaat);

Als ik hem op de application.run manier doe:
code:
1
Application.Run(new switchboard(constructor geblaat));

Dan reageert de hoofdform niet meer op commandos en voert hij zijn Listener (voor inkomende berichten) ook niet meer uit.

Wat ik nou graag wil is dat beide gewoon als een 'main' runnen (ofwel, ze runnen onafhankelijk van elkaar).

Ik hoop dat het zo wat duidelijker is :)

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Je zet je applicatie verkeerd op. Je applicatie is niet het form, het form is een onderdeel van de gui van je applicatie, je applicatie zelf zit daaronder.

In jouw geval heb je dus een X aantal connecties met evenzovele switchboards. Iedere connectie heeft een eigen thread. Die thread verzorgt de data streaming tussen switchboard en socket. Thread ontvangt en verstuurt dus data. Wanneer data ontvangen wordt van switchboard, moet dat worden getoond op het form dat hoort bij de thread. De thread moet dan (ik zou dat via delegates doen) een method oid kunnen aanroepen (of P/Invoke) van het bij de thread behorende form dat er data is en dat die moet worden weerggeven.

Krijgt het form de focus en wordt er iets ingetikt en klikt iemand op een button 'verzenden' (noem maar iets), dan moet het form de data die moet worden verzonden aan de bijbehorende thread geven (kan ook weer met delegates). De Thread ontvangt de text die moet worden verstuurd en stuurt dat naar het switchboard wat bij die thread hoort.

Je applicatie bestaat dus niet uit een form dat je start met Application.Run(), maar uit een soort kerneltje die enerzijds initiele userinput verwacht bijvoorbeeld, wanneer je een initieel scherm wilt openen zonder connecties, en anderzijds een initiele thread spawnt naar het 1e switchboard. Die thread heeft dus een bijbehorend view formpje zoals boven beschreven.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com

Pagina: 1