Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupérer un nom de formulaire dans une fonction

18 réponses
Avatar
jerome
Bonjour j'essaie de récupérer un texte dans une fonction et de faire en
sorte que me soit retourné le nom du formulaire correspondant

du style

private sub formulaire(myForm as integer) as Form
... chercher monTexte correspondant à monNumero
end sub

et de récupérer cette valeur en tant que formulaire pour pouvoir ensuite
l'utiliser comme tel.

Mais je n'y arrive pas.

Merci

8 réponses

1 2
Avatar
Fred
dans : news:%,
Guy DETIENNE écrivait :

Salut ;O)
Tu dis
"Dans ce cas tu crées une instance de Form vide "



(ou toujours d'une même classe de Form)

Pas du tout, j'instancie bien un Form existant. Place des objets
sur ta form que tu appelleras via son nom et tu verras.
Fais le test !







Hélas je ne peux pas. Pas de vb6 sous la main.
Donc la méthode Add de la collection Forms crée une instance de feuille
en fonction du nom de la classe passé en paramètre ?
En lisant ton exemple, je pensais que c'était le nom que l'on donnait à
l'instance créée. D'où ma confusion.
C'est la technique dont j'ignorais l'existence sous vb6. Une création
d'objet en fonction d'un type défini dynamiquement.

Un peu comme si on écrivait :
Dim monType As String
monType = "Integer"
Dim maVariable As monType

Ou bien avec l'exemple des Forms, si j'ai dans mon projet une feuille
"MaClasseForm", je peux en créer une instance en écrivant :
Dim f as Form
Set f = Forms.Add("maClasseForm")

C'est bien cela ?
(Désolé de ne pouvoir tester tout seul !)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Fred
dans : news:,
Guy DETIENNE écrivait :

Re ;O)



Re,

Et pour info, lorsque tu fais un "Load Form1", tu ne fais
qu'instancier une classe de ta Form.



Oui, c'est d'ailleurs bien cette ambiguïté que je reproche à vb6.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
jerome
Oui.

Cela fonctionne très bien comme ça.

Merci beaucoup

"Guy DETIENNE" wrote in message
news:
Salut ;O)

Oui c'est possible !

Pour l'exemple, on créera 2 forms : Form1 et Form2

Form2 reste vide
Sur Form1 : un bouton Command1
On colle ceci dans le code du formulaire:

Private Sub Command1_Click()

Dim MyVariable as String

MyVariable = "Form2"
Call LoadFormByName(MyVariable)

End Sub

Et une petite procédure bien sympa à placer aussi dans Form1 ou dans un
module

Public Sub LoadFormByName(ByVal strFormName As String)

Dim MyForm As Form

Set MyForm = Forms.Add(strFormName)
MyForm.Show

End Sub

J'espère que cela répond à ton attente.

Guy


"jerome" a écrit dans le message de news:
OhbiQc%
> Bonjour j'essaie de récupérer un texte dans une fonction et de faire en
> sorte que me soit retourné le nom du formulaire correspondant
>
> du style
>
> private sub formulaire(myForm as integer) as Form
> ... chercher monTexte correspondant à monNumero
> end sub
>
> et de récupérer cette valeur en tant que formulaire pour pouvoir ensuite
> l'utiliser comme tel.
>
> Mais je n'y arrive pas.
>
> Merci
>
>




Avatar
Guy DETIENNE
Salut ;O)

En effet, la méthode Add de la collection Forms est très ambigüe.
Le fonctionnement est que lorsque l'on tente de créer une Form ayant le même
nom qu'une existante, l'existante est dès lors instanciée...

Je ne vois pas d'autres explications.

Guy


"Fred" a écrit dans le message de news:
en4to$
dans : news:,
Guy DETIENNE écrivait :

Re ;O)



Re,

Et pour info, lorsque tu fais un "Load Form1", tu ne fais
qu'instancier une classe de ta Form.



Oui, c'est d'ailleurs bien cette ambiguïté que je reproche à vb6.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
Guy DETIENNE
Au plaisir...

Guy


"jerome" a écrit dans le message de news:

Oui.

Cela fonctionne très bien comme ça.

Merci beaucoup

"Guy DETIENNE" wrote in message
news:
Salut ;O)

Oui c'est possible !

Pour l'exemple, on créera 2 forms : Form1 et Form2

Form2 reste vide
Sur Form1 : un bouton Command1
On colle ceci dans le code du formulaire:

Private Sub Command1_Click()

Dim MyVariable as String

MyVariable = "Form2"
Call LoadFormByName(MyVariable)

End Sub

Et une petite procédure bien sympa à placer aussi dans Form1 ou dans un
module

Public Sub LoadFormByName(ByVal strFormName As String)

Dim MyForm As Form

Set MyForm = Forms.Add(strFormName)
MyForm.Show

End Sub

J'espère que cela répond à ton attente.

Guy


"jerome" a écrit dans le message de news:
OhbiQc%
> Bonjour j'essaie de récupérer un texte dans une fonction et de faire en
> sorte que me soit retourné le nom du formulaire correspondant
>
> du style
>
> private sub formulaire(myForm as integer) as Form
> ... chercher monTexte correspondant à monNumero
> end sub
>
> et de récupérer cette valeur en tant que formulaire pour pouvoir
> ensuite
> l'utiliser comme tel.
>
> Mais je n'y arrive pas.
>
> Merci
>
>








Avatar
Fred
dans : news:,
Guy DETIENNE écrivait :

Salut ;O)



Bonsoir,

En effet, la méthode Add de la collection Forms est très ambigüe.



Oui, c'est le moins qu'on puisse dire ! ;-)
En fait je faisais allusion à cette possibilité d'utiliser le nom d'une
form :
- Soit comme type/classe dans
Dim f As New MaForm
ainsi que tu l'as rappelé.
- Soit comme variable/instance dans
MaForm.Caption = "Le titre"
Je ne trouve pas cela très propre.

Le fonctionnement est que lorsque l'on tente de créer une Form ayant
le même nom qu'une existante, l'existante est dès lors instanciée...




J'en suis encore épaté :-)
Donc non seulement cela retrouve le type en fonction de son nom à
l'exécution mais en plus cela ne recrée pas une nouvelle instance s'il
en existe déjà une !

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Guy DETIENNE
On peut encore être épaté par VB...
A vrai dire, je découvre encore parfois des subtilités insoupconnées...

Et VB est-il propre ou pas ? Y a début à l'horizon. Cela dépend en grande
partie du programmeur, puis le langage en tant que tel.

Guy


"Fred" a écrit dans le message de news:

dans : news:,
Guy DETIENNE écrivait :

Salut ;O)



Bonsoir,

En effet, la méthode Add de la collection Forms est très ambigüe.



Oui, c'est le moins qu'on puisse dire ! ;-)
En fait je faisais allusion à cette possibilité d'utiliser le nom d'une
form :
- Soit comme type/classe dans
Dim f As New MaForm
ainsi que tu l'as rappelé.
- Soit comme variable/instance dans
MaForm.Caption = "Le titre"
Je ne trouve pas cela très propre.

Le fonctionnement est que lorsque l'on tente de créer une Form ayant
le même nom qu'une existante, l'existante est dès lors instanciée...




J'en suis encore épaté :-)
Donc non seulement cela retrouve le type en fonction de son nom à
l'exécution mais en plus cela ne recrée pas une nouvelle instance s'il en
existe déjà une !

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
jm
"Guy DETIENNE" wrote in message
news:
On peut encore être épaté par VB...
A vrai dire, je découvre encore parfois des subtilités insoupconnées...

Et VB est-il propre ou pas ? Y a début à l'horizon. Cela dépend en
grande partie du programmeur, puis le langage en tant que tel.



Hello,

j'ai coutume de dire qu'il n'y a PAS de mauvais
langages, seulement de mauvais programmeurs.

Je peux écrire du code super propre et lisible
en FORTRAN (pas vraiment le mieux pour faire ça),
de même qu'en se forçant un peu, on peut écrire
du code immonde en ADA (faut se forcer, mais on peut).

--
jean-marc
1 2