Focus à une Form encapsulée dans un Frame

Résolu
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 - Modifié par yoanpg le 7/03/2016 à 20:13
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 - 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 :)

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 mars 2016 à 20:00
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 ...
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
7 mars 2016 à 20:10
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 mars 2016 à 20:28
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 ...


0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
7 mars 2016 à 22:16
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 mars 2016 à 00:44
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 !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 8/03/2016 à 08:36
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.
0
yoanpg Messages postés 156 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 20 janvier 2024 3
8 mars 2016 à 18:02
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 :)
0
Rejoignez-nous