Valeur non accessible car "privée" que se passe t'il ?

Résolu
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 15 nov. 2011 à 09:57
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 - 15 nov. 2011 à 13:29
Bonjour,
Sur un log comportant 2 forms que j'appelle form1 et form2, j'ai un calcul simplissime a faire

Form1 contient trois textbox A et B qui contiendront des nombres calculés compris entre -5.00 et +5.00 a deux decimales pres et TextboxC qui contient une valeur calculee et dont la valeur se situe dans les memes fourchettes que textbox A et B

Comment se fait ce calcul
Pour la textboxA : je vais chercher une valeur calculée dans Form2 dans une textboxD et je multiplie cette valeur par 0.25

Pour la textbox B : Je prends la valeur negative de textboxA et je lui ajoute la valeur de TextboxC

Tout ceci se fait retrospectivement, c'est a dire :
- J'entre les valeurs dans form1, je clique sur calcul et toutes les valeurs des textbox calculées dans le form sauf A et B s'affichent

- j'ouvre form2, form1 se cache et un calcul se fait automatiquement.
Les valeurs contenues dans Form1.A et Form1.B sont calculées

- Je clique sur un bouton qui me ramène a Form1 et cache form2, les valeurs s'affichent alors dans form1

J'ai donc fait :

Dans form2 pour respecter la retrospectivité
 
'En debut de form2
    Dim valD As Double
'Calcul de A
        valA = valD * 0.25
        Form1.A.Text = (valA).ToString("0.00")
        valB = -valA + (Form1.ValC)
        Form1.B.Text = (valB).ToString("0.00")


En debut de form1 j'ai
Dim valC As Double
    Dim valA As Double
    Dim valB As Double


J'ai bien sur mis les visible False et Visible True aux bons endroits
Tout fonctionne niveau affichage mais au niveau calcul j'ai l'erreur suivante :

Projet.Form1.ValC n'est pas accessible dans ce contexte, car il est 'Private'


Je ne comprends absolument pas ce qui se passe et quel est le sens de cette erreur
Merci de m'eclairer

6 réponses

ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
15 nov. 2011 à 11:26
Bonjour Attila,

En effet :

' form 1
dim G
public P

sub x()
dim L
if g > p then
dim B
' ...
end if
end sub ' x
' fin form 1


' form 2
sub y()
form1.P = form1.P + 1
end sub ' y
' fin form 2

-----------------

P est public, elle peut être utilisée partout (mais pas indicée je crois p(x), pour l'utiliser hors sa form il faudra y adjoindre le nom de sa form d'origine (form1.P)

G est globale à la form

L est locale à la procédure de la form

B est local au bloc de la procédure de la form (ici IF).

Sauf par des paramètres spéciaux de code (byRef ou autres), chaque variale ne fonctionne quand sur son territoire géographique.

En cas de conflit : même nom et type de vriable en deux endroit de territoire différent, il y a une priorité, je crois que c'est la variable locale qui compte (sous réserve).

Il reste notamment la possibilité de faire des modules (origine du Basic), c'est une sorte de form de code public.
Pour ma part je n'utilise pas car l'avantage est de ne pas avoir à réécrire un code identique, mais l'inconvénient est qu'on se retrouve assez facilement avec des conflits de variables, entre son programme et le module, et qu'il faut sans cesse faire attention... Préférant réserver un form invisible au code commun.

Cordialement, Joe.
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 nov. 2011 à 10:52
Salut
Dim ValC As String 
équivalent à
 private ValC as string


donc si tu veux l'utiliser dans une autre form
 Public  ValC as string
1
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
15 nov. 2011 à 10:05
Bonjour,

Tout dépend où tu l'as déclarée, et la portée de cette variable..
Si rien n'est précisée, la variable sera private, donc accessible uniquement depuis le module où tu l'as déclaré.
Il faut donc te la déclarer en public pour y avoir accès depuis ta 2ème form

L'expérience, c'est une connerie par jour, mais jamais la même..
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
15 nov. 2011 à 10:44
Voila ce que j'ai dans mon form1

Public Class Form1    
    Dim R As Boolean
    Dim ValH As Boolean
    Dim ValX As String
    Dim ValY As String
    Dim ValZ As String
    Dim ValA As String
    Dim ValB As String
    Dim ValC As String


Donc d'après moi, C qui est bien une valeur de Form1 est declarée en "public" non ?
Pourquoi je ne pourrais pas appeler Form1.Valc dans mon Form2 ???
0

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

Posez votre question
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
15 nov. 2011 à 13:09
ah ben j'apprends quelque chose la shaW, je pensais que Public Class Form1 suffisait a rendre public les declarations qui suivent

Merci EhJoe pour ce cours d'algo interessant et instructif...

Au fait je n'ai toujours pas reçu le livre que se passe t'il ?
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
15 nov. 2011 à 13:29
Attila est là...

Ben je n'en sais rien, mais moi le fisc m'a envoyé une lettre recommandée il y a six jours et je ne l'ai pas encore... Nous sommes à deux kilomètres de distance, soit pour l'instant du 13 mètres par heure (vitesse d'une tortue peut être)...
Avec les deux fériés la Poste a dû prendre un gros retard je pense...

Mais tu dois avoir un site de réclamation dans ce cas, si tu ne trouves pas, dis-moi je tenterais de trouver, mais attend une quinziane avant, je sais c'est long, mais pour ma lettre recommandée aussi c'est long, la pagaille...

Cordialement, Joe.
0
Rejoignez-nous