none
VB 2010 EXPRESS - Manipulation des Numériques en Multi Windows Forms RRS feed

  • Question

  • Bonjour à tous

     

    J'ai commencé à m'intéresser à la programmation depuis quelques semaines avec VB 2010 Express à l'aide des tutorials de School Freeware et des sites de P.Lasserre et du Zéro. Je tente maintenant de réaliser un petit programme constitué de deux "Forms", la première (Form1) stockant les Données dans des Textboxes, et la seconde (Form2) permettant d'effectuer des calculs, d'une part à partir des données de la Form1, et d'autre part à partir de chiffres entrés dans des Textboxes de la Form2, le résultat devant apparaître lui-même dans un Textbox en Form2. Après avoir essayé plusieurs procédés, je n'obtiens à ce jour au mieux qu'un résultat = Zéro.

    Qui parmi vous pourrait m'aider à m'indiquer où est mon erreur?

    Ci-dessous copies des deux Forms :

     

    Public Class Form1

     

        Public num1 As String

        Public num2 As String

        Public nb1 As Single = CSng(num1)

        Public nb2 As Single = CSng(num2)

     

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Form2.Show()

     

        End Sub

     

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

            Close()

     

        End Sub

     

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            num1 = TextBox1.Text

            num2 = TextBox2.Text

     

        End Sub

     

      

    End Class

     

     

     

     

    Public Class Form2

     

        Dim num3 As String

        Dim result As Single

        Dim s As Single = Form1.nb1 + Form1.nb2

        Dim nb3 As Single = CSng(num3)

     

        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            num3 = TextBox1.Text

     

        End Sub

     

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            result = nb3 * s

            TextBox2.Text = result.ToString

     

        End Sub

     

    End Class

     

     

    Merci par avance.

    Bien cordialement.

    lundi 22 août 2011 20:14

Réponses

  • Le lien "marquer comme réponse" présent sous le cadre de la réponse ne fonctionne pas ?

    Sinon je pensais (en fait c'est une réponse dont je suis l'auteur et que Ciprian a marqué) à qq chose comme :

      Public ReadOnly Property Kilométrage As Integer
        Get
          Return CType(ListBox1.SelectedItem, Integer)
        End Get
      End Property
    

    donc dans un formulaire. Ce qui permet dans dans un autre formulaire de faire MyOtherForm.Kilométrage pour lire la valeur sélectionnée sur ce formulaire.

    L'avantage de ne pas aller lire directement le contrôle est que cela permettra de remplacer cette liste par des boutons radios ou une zone de saisie libre si on ne veut plus choisir parmi une liste prédéfinie sans avoir aucune modification à faire dans le ou les formulaires qui utilisent cette propriété Kilométrage. Si par contre on accède directement au contrôle, les autres formulaires sont à modifier alors que le contrôle utilisée pour la saisie n'a en réalité aucune importance (ils veulent juste pouvoir récupérer un kilométrage).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Zwin1 mercredi 24 août 2011 21:05
    mercredi 24 août 2011 18:02
    Modérateur

Toutes les réponses

  • Bonjour,

    Il me semble que vous essayez de passer une variable entre deux forms

    Un thread donne la réponse:

    http://social.msdn.microsoft.com/forums/fr-fr/visualcsharpfr/thread/B95B96E4-418A-4A5E-9B5F-DD7FA280BB3E

     


    fred
    mardi 23 août 2011 10:19
  • Bonjour,

    Il faut penser à préfixer la variable avec form1 comme ceci:

    Public Class Form1
      Public nombre As Integer
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = "36"
        nombre = TextBox1.Text
      End Sub
    
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.Show()
      End Sub
    
    Public Class Form2
      Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Form1.nombre.ToString()
      End Sub
    End Class
    
    



    fred
    mardi 23 août 2011 10:27
  • Bonjour Fred75. Merci pour votre réponse rapide.

    Il ne s'agit pas de ce que vous proposez, mais d'utiliser une variable de la form1 dans la form2 sans la faire passer d'un textbox à un autre. Je m'explique:

    En Form1, je désire pouvoir entrer des données en Textbox, qui pourront varier d'un projet à l'autre. En Form2 qui sera ensuite la seule utilisée, j'entrerai en textbox d'autres valeurs. Le calcul que j'essaie de coder fait appel aux données entrées en Form1 sans qu'elles apparaisent en Textbox de Form2. Un bouton "calculer" déclenchera en Form2 l'apparition du résultat dans une Textbox "résultat".

    Exemple: calcul de voyage - En Form1, j'entre la donnée "consommation" selon le type de voiture du projet. En Form2 j'entre le prix du litre et le kilométrage parcouru. Je cherche la formule du genre: "résultat" = (Form1.consom/100)* prix*km, sans faire passer la valeur "consom" d'une Textbox en Form1 à une Textbox en Form2. Mais peut-être n'est-ce pas possible avec VB 2010 car le logiciel ne semble pas accepter la valeur Form1.Variable dans un calcul en Form2 ? Je n'ai trouvé aucun exemple de ce genre sur les forums ni dans les tutos.

     

    mardi 23 août 2011 12:45
  • Bonjour,

    Un formulaire est une classe comme une autre. On peut donc y déclarer soit une "variable" qui sera accessible si elle est déclarée publique, soit une propriété publique (ce qui permet par exemple de masquer le vrai nom d'un contrôle qui contiendrait la valeur que l'on veut récupérer, ce qui rendra le code moins fragile si le formulaire est changé).

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 23 août 2011 18:33
    Modérateur
  • Bonjour à tous

    Bien noté la réponse de Ciprian Duduiala qui fait d'ailleurs l'objet d'une marque d'intérêt. Cependant, en tant que débutant, je n'ai pas compris ce qu'il veut dire dans la phrase qui suit:

    "...propriété publique (ce qui permet par exemple de masquer le vrai nom d'un contrôle qui contiendrait la "valeur que l'on veut récupérer, ce qui rendra le code moins fragile si le formulaire est changé).

    Un petit exemple si possible serait bienvenu!

     

    mercredi 24 août 2011 15:59
  • Le lien "marquer comme réponse" présent sous le cadre de la réponse ne fonctionne pas ?

    Sinon je pensais (en fait c'est une réponse dont je suis l'auteur et que Ciprian a marqué) à qq chose comme :

      Public ReadOnly Property Kilométrage As Integer
        Get
          Return CType(ListBox1.SelectedItem, Integer)
        End Get
      End Property
    

    donc dans un formulaire. Ce qui permet dans dans un autre formulaire de faire MyOtherForm.Kilométrage pour lire la valeur sélectionnée sur ce formulaire.

    L'avantage de ne pas aller lire directement le contrôle est que cela permettra de remplacer cette liste par des boutons radios ou une zone de saisie libre si on ne veut plus choisir parmi une liste prédéfinie sans avoir aucune modification à faire dans le ou les formulaires qui utilisent cette propriété Kilométrage. Si par contre on accède directement au contrôle, les autres formulaires sont à modifier alors que le contrôle utilisée pour la saisie n'a en réalité aucune importance (ils veulent juste pouvoir récupérer un kilométrage).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Zwin1 mercredi 24 août 2011 21:05
    mercredi 24 août 2011 18:02
    Modérateur
  • Merci, je crois avoir compris votre explication.

    Cordialement

    mercredi 24 août 2011 21:08