neyja
Messages postés13Date d'inscriptionlundi 30 mai 2011StatutMembreDernière intervention 2 mars 2016
-
Modifié par NHenry le 16/01/2016 à 20:39
neyja -
23 févr. 2016 à 21:21
Bonsoir, j'aimerais de l'aide concernant l'utilisation d'une form fille appelée elle même par une form fille :
Appel de la première form fille depuis la form principale
------------------------------------------------
FormSecondaire = New FormSecondaire
Dim t As New Thread(AddressOf AfficherForm)
t.IsBackground = True : t.Start()
----------------
Sub AfficherForm()
FormSecondaire.ShowDialog()
End Sub
----------------------------------------------
Appel de la seconde form fille qui est appelée à partir de la première form fille
------------------------------------------------
TroisiemeForm = New TroisiemeForm
Dim t As New Thread(AddressOf FormPrincipale.AfficherTroisiemeForm)
t.SetApartmentState(ApartmentState.STA) : t.IsBackground = True : t.Start()
--------------
Sub AfficherTroisiemeForm()
TroisiemeForm.ShowDialog()
End Sub
-------------------------------------------------
Tout fonctionne sauf que si je ferme la deuxième forme (qui a ouvert la troisieme), la troisieme forme reste ouverte mais certains éléments au sein de celle ci ne marche plus comme picturebox, toolstrip, etc...
Comment puis-je faire ?
Merci de m'aiguiller et bonne journée à tous :D
EDIT : Ajout des balises de code (la coloration syntaxique). Explications disponibles ici : ICI
neyja
Messages postés13Date d'inscriptionlundi 30 mai 2011StatutMembreDernière intervention 2 mars 2016 16 janv. 2016 à 21:46
Ha oui effectivement c'est bien plus lisible avec désolé.
En revanche j'ai mal posé ma question, je veux justement que la troisieme form reste ouverte quand je ferme la deuxième mais les éléments au sein de celle ci ne marche plus comme picturebox, toolstrip, etc... alors qu'ils marchent tant que je laisse la deuxieme form ouverte, c'est ce problème que j'aimerais résoudre.
Bonne soirée
Whismeril
Messages postés18992Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention29 mars 2024654 16 janv. 2016 à 21:53
En ce cas, avec si peu d'infos ça va être impossible de te répondre.
Et d'ailleurs, le peu d'info me laisse perplexe: pourquoi fait tu un thread pour lancer les form (je n'en vois pas l'intérêt, il me semble donc qu'il y faille un raison bien particulière)? Et en plus en mode Dialog, ce qui est sensé bloquer l'exécution de la form appelante, mais vu que l'appel vient d'un thread, je ne pense pas que ça bloque la form....
Bonjour,
Pour moi, dès lors que le chargement et l'affichage de la 2ème form fille résulte de l'exécution d'un fil distinct démarré par la première form fille, fait que seule la première form fille a "la main" sur cette fenêtre. En fermant la première form fille, plus rien n'a la main sur la seconde.
L'affichage de la fenêtre de la seconde form fille n'est alors qu'un graphique inerte résiduel d'un form qui n'existe plus mais dont la fenêtre graphique n'a pas été détruite.
EDIT il serait à ce propos intéressant d'utiliser la fonction WindowFromPoint de la librairie "user32" de l'Api de Windows alors que le curseur se trouve sur cette "Form". Je ne serais pas surpris de ce que le handle retourné soit celui du form Parent et non celui de la seconde form fille.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 17 janv. 2016 à 13:42
Evite tout simplement d'ouvrir tes forms filles dans des fils différents ! Cela ne sert rigoureusement à rien ! Whismeril (que je salue) t'en a dit un sage mot, non ?
neyja
Messages postés13Date d'inscriptionlundi 30 mai 2011StatutMembreDernière intervention 2 mars 2016 17 janv. 2016 à 16:17
D'accord merci pour vos réponses c'est juste que je suis débutant et je fais des essais sans but de logiciel x) je pensais donc que ça pouvait être nécessaire dans certains projets.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 17 janv. 2016 à 17:56
Je ne peux que te féliciter (c'est ainsi que l'on devient un bon développeur) de t'imposer des petits exercices/tests isolés qui demeureront toujours la meilleure manière de construire ultérieurement des applications beaucoup mieux construites et mieux maitrisées
Cet exercice-là, toutefois, n'est pas celui qui convient pour te former au "multithreading", que l'on réserve en général à l'exécution, en parallèle, de tâches très distinctes entre elles.
Un exemple (ici : de traitement de données) ?
- un fil distinct pour l'interface (tous tes Forms, contrôles, etc ...).
- un fil réservé à l'importation de données
- un fil réservé à l'enregistrement de données
- un fil éventuellement réservé à la communication (en réseau, ...) .
Bonne étude et amitiés.