Bonjour,
J'essaie tant bien que mal de passer de VB6 à VB NET. Après plusieurs
recherches , je ne trouve pas la solution ou l'explication à mon problème.
J'ai créé deux formulaires. J'ouvre le premier et via un évènement bouton
j'ouvre le deuxième formulaire. Si j'ai bien compris au moment du click,
j'ai écris ceci :
...
Dim frmFiche As New Form2
frmFiche.ShowDialog()
effectivement mon deuxième formulaire s'ouvre.
Dans ce deuxième formulaire, j'entre des données de distances et de temps
dans un module je calcule la moyenne au kilomètre.
Le problème se situe dans le module où je calcule la moyenne. A l'issue du
calcul, je veux mettre la propriété texte d'un contrôle
textbox (txtMoyenne) à jour qui se trouve sur mon deuxième formulaire.
MKm = TTotal / (Distance / 1000)
frmFiche.txtMKm.Text = MKm
et c'est là que j'ai une erreur ! Il ne connait pas frmFiche.Si je fais un
frmFiche as New Form2, il me semble qu'il crée alors un deuxième
donc ce n'est pas cela que je dois faire. Comment avoir accès au
des contrôles qui se trouvent sur ce deuxième formulaire.
Dans VB6, cela était facile puisqu'il fallait juste écrire le nom du
formulaire (formulaire.nomcontrole.text) .
Un peu d'aide me serait d'une grande utilité pour que je puisse continuer
mon apprentissage :-)
Merci d'avance de vos réponses
Bonjour,
J'essaie tant bien que mal de passer de VB6 à VB NET. Après plusieurs
recherches , je ne trouve pas la solution ou l'explication à mon problème.
J'ai créé deux formulaires. J'ouvre le premier et via un évènement bouton
j'ouvre le deuxième formulaire. Si j'ai bien compris au moment du click,
j'ai écris ceci :
...
Dim frmFiche As New Form2
frmFiche.ShowDialog()
effectivement mon deuxième formulaire s'ouvre.
Dans ce deuxième formulaire, j'entre des données de distances et de temps
dans un module je calcule la moyenne au kilomètre.
Le problème se situe dans le module où je calcule la moyenne. A l'issue du
calcul, je veux mettre la propriété texte d'un contrôle
textbox (txtMoyenne) à jour qui se trouve sur mon deuxième formulaire.
MKm = TTotal / (Distance / 1000)
frmFiche.txtMKm.Text = MKm
et c'est là que j'ai une erreur ! Il ne connait pas frmFiche.Si je fais un
frmFiche as New Form2, il me semble qu'il crée alors un deuxième
donc ce n'est pas cela que je dois faire. Comment avoir accès au
des contrôles qui se trouvent sur ce deuxième formulaire.
Dans VB6, cela était facile puisqu'il fallait juste écrire le nom du
formulaire (formulaire.nomcontrole.text) .
Un peu d'aide me serait d'une grande utilité pour que je puisse continuer
mon apprentissage :-)
Merci d'avance de vos réponses
Bonjour,
J'essaie tant bien que mal de passer de VB6 à VB NET. Après plusieurs
recherches , je ne trouve pas la solution ou l'explication à mon problème.
J'ai créé deux formulaires. J'ouvre le premier et via un évènement bouton
j'ouvre le deuxième formulaire. Si j'ai bien compris au moment du click,
j'ai écris ceci :
...
Dim frmFiche As New Form2
frmFiche.ShowDialog()
effectivement mon deuxième formulaire s'ouvre.
Dans ce deuxième formulaire, j'entre des données de distances et de temps
dans un module je calcule la moyenne au kilomètre.
Le problème se situe dans le module où je calcule la moyenne. A l'issue du
calcul, je veux mettre la propriété texte d'un contrôle
textbox (txtMoyenne) à jour qui se trouve sur mon deuxième formulaire.
MKm = TTotal / (Distance / 1000)
frmFiche.txtMKm.Text = MKm
et c'est là que j'ai une erreur ! Il ne connait pas frmFiche.Si je fais un
frmFiche as New Form2, il me semble qu'il crée alors un deuxième
donc ce n'est pas cela que je dois faire. Comment avoir accès au
des contrôles qui se trouvent sur ce deuxième formulaire.
Dans VB6, cela était facile puisqu'il fallait juste écrire le nom du
formulaire (formulaire.nomcontrole.text) .
Un peu d'aide me serait d'une grande utilité pour que je puisse continuer
mon apprentissage :-)
Merci d'avance de vos réponses
J'essaie tant bien que mal de passer de VB6 à VB NET.
Si j'ai bien compris au moment du click,
j'ai écris ceci :
Dim frmFiche As New Form2
frmFiche.ShowDialog()
Dans ce deuxième formulaire, j'entre des données de distances et de temps
dans un module je calcule la moyenne au kilomètre.
Return TTotal / (Distance / 1000)
frmFiche.txtMKm.Text = CalculerMoyenne(...)
J'essaie tant bien que mal de passer de VB6 à VB NET.
Si j'ai bien compris au moment du click,
j'ai écris ceci :
Dim frmFiche As New Form2
frmFiche.ShowDialog()
Dans ce deuxième formulaire, j'entre des données de distances et de temps
dans un module je calcule la moyenne au kilomètre.
Return TTotal / (Distance / 1000)
frmFiche.txtMKm.Text = CalculerMoyenne(...)
J'essaie tant bien que mal de passer de VB6 à VB NET.
Si j'ai bien compris au moment du click,
j'ai écris ceci :
Dim frmFiche As New Form2
frmFiche.ShowDialog()
Dans ce deuxième formulaire, j'entre des données de distances et de temps
dans un module je calcule la moyenne au kilomètre.
Return TTotal / (Distance / 1000)
frmFiche.txtMKm.Text = CalculerMoyenne(...)
Bonjour Zouri (et merci),
Je suis peut-être lourd mais ça ne fonctionne pas :-( ... voici mon code !
Où est l'erreur cher maître ?? :-)
Ma classe : (Calcul.vb)
Option Explicit On
Public Class Calcul
Dim THr As Single
Dim TMin As Single
Dim TSec As Single
Dim TTotal As Single
Dim Distance As Single
Dim MKm As Single
Public Function Moyenne(ByVal H As Single, ByVal M As Single, ByVal S As
Single, ByVal D As Single) As Single
THr = CSng(H)
TMin = CSng(M)
TSec = CSng(S)
Distance = CSng(D)
'ramener tout en secondes
THr = THr * 3600
TMin = TMin * 60
TTotal = THr + TMin + TSec
'total en minutes
TTotal = Format((TTotal / 60), "##.00")
MKm = TTotal / (Distance / 1000)
Return MKm
End Function
End Class
Dans mon formulaire :
'calcul moyenne au km
Me.txtMKm.Text = Moyenne(CSng(txtTHr.Text), CSng(txtTMin.Text),
CSng(txtTSec.Text), CSng(txtDistance.Text))
Message d'erreur -->
Visual Studio ProjectsWindowsApplication1Form2.vb(683): Le nom 'Moyenne'
n'est pas déclaré.
Si je comprends celle-ci , je devrait comprendre le reste ... ou plutôt les
autres :-)
Bonjour Zouri (et merci),
Je suis peut-être lourd mais ça ne fonctionne pas :-( ... voici mon code !
Où est l'erreur cher maître ?? :-)
Ma classe : (Calcul.vb)
Option Explicit On
Public Class Calcul
Dim THr As Single
Dim TMin As Single
Dim TSec As Single
Dim TTotal As Single
Dim Distance As Single
Dim MKm As Single
Public Function Moyenne(ByVal H As Single, ByVal M As Single, ByVal S As
Single, ByVal D As Single) As Single
THr = CSng(H)
TMin = CSng(M)
TSec = CSng(S)
Distance = CSng(D)
'ramener tout en secondes
THr = THr * 3600
TMin = TMin * 60
TTotal = THr + TMin + TSec
'total en minutes
TTotal = Format((TTotal / 60), "##.00")
MKm = TTotal / (Distance / 1000)
Return MKm
End Function
End Class
Dans mon formulaire :
'calcul moyenne au km
Me.txtMKm.Text = Moyenne(CSng(txtTHr.Text), CSng(txtTMin.Text),
CSng(txtTSec.Text), CSng(txtDistance.Text))
Message d'erreur -->
Visual Studio ProjectsWindowsApplication1Form2.vb(683): Le nom 'Moyenne'
n'est pas déclaré.
Si je comprends celle-ci , je devrait comprendre le reste ... ou plutôt les
autres :-)
Bonjour Zouri (et merci),
Je suis peut-être lourd mais ça ne fonctionne pas :-( ... voici mon code !
Où est l'erreur cher maître ?? :-)
Ma classe : (Calcul.vb)
Option Explicit On
Public Class Calcul
Dim THr As Single
Dim TMin As Single
Dim TSec As Single
Dim TTotal As Single
Dim Distance As Single
Dim MKm As Single
Public Function Moyenne(ByVal H As Single, ByVal M As Single, ByVal S As
Single, ByVal D As Single) As Single
THr = CSng(H)
TMin = CSng(M)
TSec = CSng(S)
Distance = CSng(D)
'ramener tout en secondes
THr = THr * 3600
TMin = TMin * 60
TTotal = THr + TMin + TSec
'total en minutes
TTotal = Format((TTotal / 60), "##.00")
MKm = TTotal / (Distance / 1000)
Return MKm
End Function
End Class
Dans mon formulaire :
'calcul moyenne au km
Me.txtMKm.Text = Moyenne(CSng(txtTHr.Text), CSng(txtTMin.Text),
CSng(txtTSec.Text), CSng(txtDistance.Text))
Message d'erreur -->
Visual Studio ProjectsWindowsApplication1Form2.vb(683): Le nom 'Moyenne'
n'est pas déclaré.
Si je comprends celle-ci , je devrait comprendre le reste ... ou plutôt les
autres :-)
> Dans le formulaire, il faut declarer une instance de la classe soit
THr = CSng(H)
TTotal = Format((TTotal / 60), "##.00")
> Dans le formulaire, il faut declarer une instance de la classe soit
THr = CSng(H)
TTotal = Format((TTotal / 60), "##.00")
> Dans le formulaire, il faut declarer une instance de la classe soit
THr = CSng(H)
TTotal = Format((TTotal / 60), "##.00")
> Dans le formulaire, il faut declarer une instance de la classe soit
J'opterais pour une méthode Shared, car logiquement, nous ne devrions pas
devoir instancier un objet Calcul pour appeler la fonction, car un objet
Calcul dans ce cas ci ne peux changer d'état. Il n'a pas de propriétés qui
serait propre à chaque instance.
Jacques,
Essai de déclarer tes variables avec la plus petite portée nécessaire
dans la fonction dans ce cas ci). Essai aussi de ne pas déclarer de
inutilement. Dans ton cas, les paramètres sont passés ByVal (par copie),
peux donc travailler directement avec ceux-ci sans avoir à les recopier
ailleurs.
Deux petites notes :
> THr = CSng(H)
Cette convertion est inutile puisque H est déjà de type Single.
> TTotal = Format((TTotal / 60), "##.00")
La fonction Format() permet de transformer une donnée (Date ou numérique)
chaine de caractère selon un format spécifié. Dans ce cas-ci, puisque tu
envois le résultat dans un type Single, VB retransforme la chaine en type
Single automatiquement, tu perds donc ton formatage. Le *formatage de
chaine* ne devrait être utiliser que *lorsque l'on veut afficher une
à l'utilisateur*.
Aussi, tu ramènes le tout en secondes pour ensuite recalculer le nombre de
minute (* 60, / 60)... Tu peux t'éviter beaucoup de problème en employant
classe TimeSpan qui représente une période de temps.
Voici ta classe modifié en suivant les commentaires énoncé ci-haut. J'ai
ajouté le mot Shared dans la signature pour désigné que la méthode est
accessible au niveau de la classe (pas d'instance nécesssaire). Le mot clé
NotInheritable désigne que cette classe ne peut être hérité (et il me
avoir lu que le compilateur effectuait quelques optimisations
supplémentaires à l'interne).
'***
Option Explicit On
Public NotInheritable Class FonctionsCalculs
Public Function CalculerMinutesParKM(ByVal tsTempsEcoule As TimeSpan,
ByVal fDistMetre As Single) As Single
' temps en minutes / distance en kilomètre
Return tsTempsEcoule.TotalMinutes / (fDistMetre / 1000)
End Function
End Class
'***
Tu l'utilises comme ceci :
'***
' parcours de 1000 mètres en 1 heure -> résultat = 60 min
Console.WriteLine(FonctionsCalculs.CalculerMinutesParKM(New
0, 0), 1000))
' parcours de 2200 mètres en 42 minutes et 17 secondes -> résultat > 19,2197 min
Console.WriteLine(FonctionsCalculs.CalculerMinutesParKM(New
42, 17), 2200))
'***
--
Cordialement
Yanick
MVP pour Visual Basic
> Dans le formulaire, il faut declarer une instance de la classe soit
J'opterais pour une méthode Shared, car logiquement, nous ne devrions pas
devoir instancier un objet Calcul pour appeler la fonction, car un objet
Calcul dans ce cas ci ne peux changer d'état. Il n'a pas de propriétés qui
serait propre à chaque instance.
Jacques,
Essai de déclarer tes variables avec la plus petite portée nécessaire
dans la fonction dans ce cas ci). Essai aussi de ne pas déclarer de
inutilement. Dans ton cas, les paramètres sont passés ByVal (par copie),
peux donc travailler directement avec ceux-ci sans avoir à les recopier
ailleurs.
Deux petites notes :
> THr = CSng(H)
Cette convertion est inutile puisque H est déjà de type Single.
> TTotal = Format((TTotal / 60), "##.00")
La fonction Format() permet de transformer une donnée (Date ou numérique)
chaine de caractère selon un format spécifié. Dans ce cas-ci, puisque tu
envois le résultat dans un type Single, VB retransforme la chaine en type
Single automatiquement, tu perds donc ton formatage. Le *formatage de
chaine* ne devrait être utiliser que *lorsque l'on veut afficher une
à l'utilisateur*.
Aussi, tu ramènes le tout en secondes pour ensuite recalculer le nombre de
minute (* 60, / 60)... Tu peux t'éviter beaucoup de problème en employant
classe TimeSpan qui représente une période de temps.
Voici ta classe modifié en suivant les commentaires énoncé ci-haut. J'ai
ajouté le mot Shared dans la signature pour désigné que la méthode est
accessible au niveau de la classe (pas d'instance nécesssaire). Le mot clé
NotInheritable désigne que cette classe ne peut être hérité (et il me
avoir lu que le compilateur effectuait quelques optimisations
supplémentaires à l'interne).
'***
Option Explicit On
Public NotInheritable Class FonctionsCalculs
Public Function CalculerMinutesParKM(ByVal tsTempsEcoule As TimeSpan,
ByVal fDistMetre As Single) As Single
' temps en minutes / distance en kilomètre
Return tsTempsEcoule.TotalMinutes / (fDistMetre / 1000)
End Function
End Class
'***
Tu l'utilises comme ceci :
'***
' parcours de 1000 mètres en 1 heure -> résultat = 60 min
Console.WriteLine(FonctionsCalculs.CalculerMinutesParKM(New
0, 0), 1000))
' parcours de 2200 mètres en 42 minutes et 17 secondes -> résultat > 19,2197 min
Console.WriteLine(FonctionsCalculs.CalculerMinutesParKM(New
42, 17), 2200))
'***
--
Cordialement
Yanick
MVP pour Visual Basic
> Dans le formulaire, il faut declarer une instance de la classe soit
J'opterais pour une méthode Shared, car logiquement, nous ne devrions pas
devoir instancier un objet Calcul pour appeler la fonction, car un objet
Calcul dans ce cas ci ne peux changer d'état. Il n'a pas de propriétés qui
serait propre à chaque instance.
Jacques,
Essai de déclarer tes variables avec la plus petite portée nécessaire
dans la fonction dans ce cas ci). Essai aussi de ne pas déclarer de
inutilement. Dans ton cas, les paramètres sont passés ByVal (par copie),
peux donc travailler directement avec ceux-ci sans avoir à les recopier
ailleurs.
Deux petites notes :
> THr = CSng(H)
Cette convertion est inutile puisque H est déjà de type Single.
> TTotal = Format((TTotal / 60), "##.00")
La fonction Format() permet de transformer une donnée (Date ou numérique)
chaine de caractère selon un format spécifié. Dans ce cas-ci, puisque tu
envois le résultat dans un type Single, VB retransforme la chaine en type
Single automatiquement, tu perds donc ton formatage. Le *formatage de
chaine* ne devrait être utiliser que *lorsque l'on veut afficher une
à l'utilisateur*.
Aussi, tu ramènes le tout en secondes pour ensuite recalculer le nombre de
minute (* 60, / 60)... Tu peux t'éviter beaucoup de problème en employant
classe TimeSpan qui représente une période de temps.
Voici ta classe modifié en suivant les commentaires énoncé ci-haut. J'ai
ajouté le mot Shared dans la signature pour désigné que la méthode est
accessible au niveau de la classe (pas d'instance nécesssaire). Le mot clé
NotInheritable désigne que cette classe ne peut être hérité (et il me
avoir lu que le compilateur effectuait quelques optimisations
supplémentaires à l'interne).
'***
Option Explicit On
Public NotInheritable Class FonctionsCalculs
Public Function CalculerMinutesParKM(ByVal tsTempsEcoule As TimeSpan,
ByVal fDistMetre As Single) As Single
' temps en minutes / distance en kilomètre
Return tsTempsEcoule.TotalMinutes / (fDistMetre / 1000)
End Function
End Class
'***
Tu l'utilises comme ceci :
'***
' parcours de 1000 mètres en 1 heure -> résultat = 60 min
Console.WriteLine(FonctionsCalculs.CalculerMinutesParKM(New
0, 0), 1000))
' parcours de 2200 mètres en 42 minutes et 17 secondes -> résultat > 19,2197 min
Console.WriteLine(FonctionsCalculs.CalculerMinutesParKM(New
42, 17), 2200))
'***
--
Cordialement
Yanick
MVP pour Visual Basic