Probleme transfert de valeur d'1 textbox d'un formulaire a un autre en applicati

[Résolu]
Signaler
Messages postés
40
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
18 juin 2008
-
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
-
Bonjour,
J'ai un petit soucis concernant un formulaire qui doit afficher une liste de client qui on le meme nom.
L'utilisateur saisie le nom du client dans le textbox "nom_client" dans le formulaire MenuPrincipal.vb et si le client est multiple alors un autre formulaire MultipleClient.vb s'ouvre lui presentant tous les clients qui ont le meme nom.
Le programme a une connection a une base Access qui contient les informations client.
L'application est aussi en mdi , le MenuPrincipal.vb, formulaire enfant, s'ouvre depuis un autre formulaire parent.
Je n'arrive pas a transmettre la valeur du textbox (nom_client) du formulaire MenuPrincipal.vb, a  ma requete dans le formulaire MultipleClient.vb.
Je pense que ca peut etre un probleme de portee des variables.
J'ai donc essaye de placer la valeur du textbox dans une variable globale afin de la passer a ma requete dans MultipleClient.vb.

Voila le code du menu principal:

Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Nom_client.KeyPress

        Dim I As Integer
        Dim recup As DialogResult
        Dim clientInexistant As Boolean = False
        Dim clientmultiple As Boolean = False
       
        If e.KeyChar <> Chr(13) Then
            MAJ()
            Exit Sub
        ElseIf e.KeyChar = Chr(8) Then
            Exit Sub
        Else
            MAJ()
        End If

        If Me.Nom_client.Text <> "" Then
            Me.Text = Nom_client.Text
            val.Text = Me.Nom_client.Text
        Else
            Me.Text = "Commande"
        End If

        '********************************CONNECTION AVEC LA TABLE CLIENT************************
        '***************************************************************************************

        cn.Open()
        dApter = New OleDb.OleDbDataAdapter("SELECT CLIENT.NumeroClient, CLIENT.NomClient, CLIENT.PrenomClient, CLIENT.TelephoneClient, CLIENT.AdresseClient" & _
                " FROM CLIENT " & _
                "WHERE (CLIENT.NomClient = '" & Me.Nom_client.Text & "')", cn)

        dApter.Fill(dset, "CLIENT")
        dTable = dset.Tables("CLIENT")
        cn.Close()

        '*********************************SI LE CLIENT EXISTE***********************************
       
        Try
           
            If dTable.Rows.Count = 1 Then
                Num_client.Text = dTable.Rows(I).Item(0)
                Prenom_client.Text = dTable.Rows(I).Item(2)
                Tel_client.Text = dTable.Rows(I).Item(3)
                adresse_client.Text = dTable.Rows(I).Item(4)
            End If

            If dTable.Rows.Count > 1 Then
                clientmultiple = True
            End If

            '********************************SI LE CLIENT N'EXISTE PAS*************************
            If dTable.Rows.Count 0 Then clientInexistant True

            '********************************DEMANDE D'ENREGISTREMENT D'UN*********************
            '***********************************NOUVEAU CLIENT*********************************

            If clientInexistant Then
                recup = MsgBox("Le client recherche n'existe pas. Voulez vous enregistrer un nouveau client ?", MsgBoxStyle.YesNo, " Recherche Client")
                If recup = Windows.Forms.DialogResult.No Then Exit Sub
                If recup = Windows.Forms.DialogResult.Yes Then Form2.Show()
            End If

            '********************************CLIENT MULTIPLE***********************************
            '**********************************************************************************

            If clientmultiple Then
                MAJ()  // c'est une procedure de mise a jour du textbox.
                MultipleClient.Show()
            End If

        Catch
            MsgBox(Err.Description, , "ERREUR")
        End Try

    End Sub

Et voici mon code pour ClientMultiple.vb

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

        Me.val.Text = MenuPrincipal.val.Text

        Me.nom_client.Text = MenuPrincipal.Nom_client.Text

        cn = New OleDb.OleDbConnection
        connexion = "provider=microsoft.jet.oledb.4.0;" & _
                        " data source= " & Application.StartupPath & "" & _
                        "pizza_est.mdb;persist security info=false;"

        cn.ConnectionString = connexion

        cn.Open()
        dApter = New OleDb.OleDbDataAdapter("SELECT CLIENT.NumeroClient, CLIENT.NomClient, CLIENT.PrenomClient, CLIENT.TelephoneClient, CLIENT.AdresseClient" & _
                " FROM CLIENT " & _
        "WHERE (CLIENT.NomClient = '" & val.Text & "')", cn)

        dApter.Fill(dset, "CLIENT")
        dTable = dset.Tables("CLIENT")
        Me.DataGridView1.DataSource = dset.Tables("Client")
        cn.Close()

    End Sub

Toute aide serait la bienvenue.
Merci d'avoir pris la peine de m'avoir lu jusqu'ici.

9 réponses

Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
5
non,

en fait si  je comprends bien, sur ton formulaire principal tu as une zone de saisie...
sur ton formulaire secondaire tu souhaites récupérer cette zone...

donc dans le formulaire secondaire tu fais ce genre de chose :

*** Debut Code ***

Public
Property textetoshow()
As
String

Set(
ByVal value
As
String)Label1.Text = value

End
Set

Gettextetoshow = Label1.Text

End
Get

End
Property*** fin Code ***

sur ton formulaire principal pour appeller le formulaire secondaire tu fais :
*** debut code **
Form2.textetoshow = TextBox1.Text

Form2.Show()

*** fin code ***

et là sur le formulaire secondaire tu récupères bien la valeur de la saisie... et tu évites les variables globales ou public qui vont restées chargées meme si tu n'en n'as pas besoin

sur ce ...

Pat

 Don't Worry , Be Happy
Messages postés
40
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
18 juin 2008

J'avais oublie la declaration des variables pour MultipleClient
    Private cn As OleDb.OleDbConnection
    Private dApter As New OleDb.OleDbDataAdapter
    Private dset As New DataSet
    Private dTable As DataTable
    Private i As Integer
    Private connexion As String
    Public val As TextBox = New TextBox

et pour MenuPrincipal.vb
    Private cn As OleDb.OleDbConnection
    Private dApter As OleDb.OleDbDataAdapter
    Private connexion As String
    Private dset As New DataSet
    Private dTable As DataTable
    Public val As TextBox = New TextBox
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
5
salut,
As tu essayé de créer sur ton formulaire MultiClient.VB une propriété public que tu alimenterais avec la saisie de l'utilisateur ?

puis ensuite tu utilises cette propriété pour ton filtre

 @+

Pat

 Don't Worry , Be Happy
Messages postés
40
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
18 juin 2008

tu veux dire avec un truc comme ca ?

Public val As String

quand le multipleclient.vb load
val = MenuPrincipal.Nom_client.Text
Messages postés
40
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
18 juin 2008

ca ne change rien.
quand je rentre le nom d'un client dans le textbox et que j'appuis sur entrer,
le form multipleclient.vb s'ouvre avec les champs de la table client mais aucun enregistrement.
je met un break point sur

dApter = New OleDb.OleDbDataAdapter("SELECT CLIENT.NumeroClient, CLIENT.NomClient, CLIENT.PrenomClient, CLIENT.TelephoneClient, CLIENT.AdresseClient" & _
                " FROM CLIENT " & _
        "WHERE (CLIENT.NomClient = '" & val.ToString & "')", cn)

et j'interroge la valeur de val dans la fenetre execution et ca me repond "".
c'est definivement un probleme de portee des variables mais comment le resoudre ?
Messages postés
40
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
18 juin 2008

" Une référence à un membre non partagé requiert une référence d'objet. "
Qu'est ce que ca veut dire ?
Messages postés
40
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
18 juin 2008

En gros tu me dis de creer une methode dans une classe.
Pour recuperer la valeur du textbox du formulaire principal et ensuite la passer en parametre a un objet que je cree dans le formulaire secondaire en appelant la methode ?
Messages postés
40
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
18 juin 2008

Oura ca marche
merci bien
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
5
Ce n'est pas une méthode mais une propriété public que tu as créé...

bonne continuation

Pat

 Don't Worry , Be Happy