Focus à une Form encapsulée dans un Frame [Résolu]

yoanpg 126 Messages postés dimanche 15 février 2009Date d'inscription 29 avril 2018 Dernière intervention - 7 mars 2016 à 19:41 - Dernière réponse : yoanpg 126 Messages postés dimanche 15 février 2009Date d'inscription 29 avril 2018 Dernière intervention
- 8 mars 2016 à 18:02
Bonjour à tous :)

Dans mon programme en VB6, j'ai une FormEnfant encapsulée dans un Frame :
SetParent FormEnfant.hWnd, Frame.hWnd

La fonction SetParent est :
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long


Cette Frame est dans une Form qui contient également un bouton. Quand je clique sur ce bouton, je fais afficher FormEnfant (avec un Show). Je voudrais que cette FormEnfant obtienne le focus (plus particulièrement le champs Texte qu'elle contient) mais
FormEnfant.TextBox.SetFocus
ne fonctionne pas :(

J'ai également essayé avec un PictureBox pour faire un Picture.SetFocus mais ça ne fonctionne pas non plus.

Comment faire pour donner le focus à cette FormEnfant ? Car d'un point de vue ergonomie ça m'embête beaucoup que l'utilisateur doive cliquer sur la FormEnfant pour lui donner le focus. :(

Merci d'avance de votre aide :)
Afficher la suite 

Votre réponse

7 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 7 mars 2016 à 20:00
0
Merci
Bonjour,
Et tu crois vraiment que tu vas obtenir une réponse éclairée alors que :
- ayant ouvert cette discussion dans le forum GENERAL de Visual Basic on ne sait p)as si tu développes sous VB.Net, VB6 ou VBA ?
- on ne voit pas où est comment du as déclaré l'utilisation des fonctions SetParent et SetFocus (qui ne sont pas des fonctions natives de Visual Basic, quelle que soit la version de VB utilisée) ?
- qu'apparaît, sortie d'on ne sait quel "chapeau", un Frame nommé FrameEnfant ?
- etc... et j'en passe...
Un peu de sérieux est ici de mise ...
Commenter la réponse de ucfoutu
yoanpg 126 Messages postés dimanche 15 février 2009Date d'inscription 29 avril 2018 Dernière intervention - 7 mars 2016 à 20:10
0
Merci
Effectivement j'ai fais quelques erreurs dans mon message (c'est ce qui arrive à devoir le retaper une 2ème fois car tout mon texte a été effacé lorsque j'ai cliqué sur le bouton de connexion du forum) mais ce n'est pas nécessaire de prendre ce ton dans ton message.

Donc pour répondre point par point
- Mon programme est en VB6
- La fonction SetParent est :
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

- La fonction SetFocus existe nativement dans VB6
- Il faut lire FormEnfant à chaque fois, FrameEnfant n'existe pas

Je corrige mes erreurs dans le post inital
J'espère que ça pourra t'éclairer pour m'aider, ainsi que les futurs lecteurs

Merci
Commenter la réponse de yoanpg
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 7 mars 2016 à 20:28
0
Merci
Ouais ...
D'où l'absolue nécessité de rester toujours calme, précis et exact (la codification, entre autres, ne laisse aucune place à autre chose).
- je déplace donc cette discussion vers le sous-forum (VB6) où elle aurait dû être ouverte. Je te prie de bien vouloir observer dorénavant cette discipline nécessaire (au demeurant rappelée dans les règles de ce forum)
- peux-tu me dire ce qui te conduit à rendre un Form enfant d'un autre via la fonction SetParent de l'Api de Windows ? Sais-tu ce qu'est un FormChild ? Pourquoi ne pas utiliser plus simplement ce que te propose à cette fin VB6 (Forms MDI et propriété MDIChild) ?
Ne jamais réinventer la roue, finalement ...


Commenter la réponse de ucfoutu
yoanpg 126 Messages postés dimanche 15 février 2009Date d'inscription 29 avril 2018 Dernière intervention - 7 mars 2016 à 22:16
0
Merci
Désolé je n'avais pas vu la liste des sous-forums disponibles.

Ce qui me conduis à mettre une Form dans un Frame d'une autre Form, c'est que je ne pars pas de rien. J'ai codé cette application depuis plusieurs années. C'est une grosse application et je ne souhaite pas repartir de 0. Je souhaite simplement faire évoluer un peu l'interface (car on peut le dire, les applis VB6 sont moches en comparaison des standards graphiques actuels !)

Donc si il y a un moyen facile de transformer une Form en MDIForm je suis intéressé, si je dois tout refaire ça mérite réflexion ...

Merci
Commenter la réponse de yoanpg
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 8 mars 2016 à 00:44
0
Merci
Je ne sais pas où tu vas ainsi, mais tu es en train, de construire ce qui s'apparente à une petite usine à gaz ...
Utilise alors un Frame en lieu et place de ton Formenfant et place ce Frame à l'intérieur du Frame que tu dis avoir sur le form principal.
Et rien ne t'empêche alors :
- ni de jouer avec la propriété Visible de ce Frame ainsi ajouté
- ni de l'agrémenter à ta guise
Et une telle transformation est très rapidement conduite !
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 8/03/2016 à 08:36
0
Merci
Je reviens de bon matin.
J'ai malgré tout voulu "voir" ton mécanisme.
- c'est en effet (comme je l'ai dit plus haut) plutôt du type usine à gaz.
- je n'ai aucun problème à donner le focus à la textbox de Formenfant, une fois cette dernière mise (setParent) dans le Frame du form principal !

Mais (je me répète-là) : vraiment ... un Frame dans le Frame serait moins lourd et plus maniable ...

EDIT : je commence à me douter de quelque-chose :
Dans ton premier message, tu as écrit :
ne fonctionne pas :(

qui ne veut, seul, rien dire !
Qu'entends-tu par "ne fonctionne pas" ?
-1) un message d'erreur ?
-2) aucun message mais focus non donné ?

Car si 1), ma foi, j'en devine la cause (évidente) !

montre-nous ici la totalité (depuis Private ...jusqu'à End Sub inclus) de la procédure où tu montres le formenfant et donnes le focus
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
yoanpg 126 Messages postés dimanche 15 février 2009Date d'inscription 29 avril 2018 Dernière intervention - 8 mars 2016 à 18:02
0
Merci
Quand je dis que ça ne fonctionne pas, c'est la solution 2, la fenêtre n'obtient pas le focus et le TextBox non plus, mais aucune erreur.

Ton post m'a donner la puce à l'oreille. Après donner le focus, j'ai d'autre code qui s'exécute (dans une sous procédure) qui fait perdre le focus à ma fenêtre. Je n'ai pas encore analyser quelle ligne exactement mais je sais d'où vient le problème.

De plus je ne connaissais pas les fenêtres MDI. Je vais regarder un peu plus en détail car ça a pas l'air trop compliqué à implémenter (je n'ai que la fenêtre parente à modifier, les fenêtres enfants restant identiques).

Merci de ton aide :)
Commenter la réponse de yoanpg

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.