IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Passage de paramètre entre Form [Débutant]


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut Passage de paramètre entre Form
    Bonjour tout le monde,

    avant toute chose je tiens à dire que j'ai cherché, lu et testé tout ce que j'ai pu mais j'en suis à me demander s'il n'y a pas un truc qui m'échappe parce que là ... je sèche

    Je suis sous SharpDevelop.

    j'ai ma Form1 dans laquelle j'ai une DGV, je fais un clic droit dessus puis editer pour ouvrir ma Form2 afin (vous l'aurez compris) d'éditer la ligne en question de ma DGV.

    J'ai dans un premier temps voulu me créer un objet "consigne" avec des variables type string. Je passe cet objet (une fois les variables initialisées comme il se doit) en paramètre à ma Form3 (j'ai fait une surcharge du constructeur new). A la compilation ça me met la ligne "me.mainForm = my.Forms.main" en erreur dans le fichier Program.vb.

    J'ai donc abandonné et chercher une autre solution plus "barbare" qui est de passer à ma form3 les valeurs de ma DGV (récupérer dans des variables) par référence (toujours en surchargeant le constructeur de form3). De là j'ai bien la lecture de mes variables, je fais mes modif', valide mais les modif' ne sont pas prises en compte. (en validant je fais un hide, je retourne sur ma form1, edite mes cellules depuis mes variables) et fait un dispose de ma form3.

    Bref ...

    mon problème est toute cette histoire de déclaration de variable (ou d'objet). L'utilisation d'un objet accessible à toutes mes form aurait été parfait. Je sais que c'est faisable, mais là je bloque sur le "où" et "comment" je dois faire mes déclarations pour que cet objet soit accessible de partout et simplement.

    j'ai testé après les "imports" ET avant "Public Partial Classe Form1" (fichier MainForm.vb) dans le MainForm.Designer.vb, mais en vain ...

    Pourquoi je ne met pas de code ?

    Parce qu'en l'état actuel des choses, je pense qu'il me manque une information disons plutôt une connaissance et je ne cherche pas à résoudre mon problème en attendant une correction de mon code mais plutôt une explication formelle sur "comment bien déclarer et utiliser un objet dans toutes les formulaires". J'espère que c'est pas trop vague.

    J'ai lu les cours sur le site, j'ai même repris mes cours de BTS (mais ils datent tellement et sont plus sur du c++ que du vb.net -gestion des différents formulaire en particulier-).

    J'espère que vous saurez et aurez envie de m'éclaircir l'esprit.

    Merci pour votre attention et pour le temps que vous saurez prendre pour ceci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Le singleton t'aidera.
    Tu as un très bon tuto ici

    Il est initialisé la première fos que tu t'en sert et reste en mémoire tout le long de ton application après avoir été utilisé.
    Sinon tu peut aussi passer tes paramètres par les property.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    ça m'a l'air super bien comme truc, faut que je me pose dessus un moment pour comprendre.

    Vu le temps que ça va me prendre je voudrais comprendre pour mes variable "public" ne sont pas vu d'une form à l'autre (ça me permettrait d'avancer mon codage et de finir de tester toutes les fonctionnalités que je dois développer avant de passer au singleton). Je fourni du code "à contre coeur" se sera peut-être plus parlant pour vous.

    Dans le fichier MainForm.vb j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Public Partial Class MainForm
    	Public dateEdit, typeEdit, toolEdit, statutEdit, lotsEdit, consigneEdit As String
    puis lorsque j'appelle ma form3 j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    Sub EditerToolStripMenuItemClick(sender As Object, e As EventArgs)
     
    		IndiceLigne = DataGridXML.CurrentRow.Index
    		dateEdit = dataGridXML.Rows(IndiceLigne).Cells(0).Value
    		typeEdit = dataGridXML.Rows(IndiceLigne).Cells(1).Value
    		toolEdit = dataGridXML.Rows(IndiceLigne).Cells(2).Value
    		statutEdit = dataGridXML.Rows(IndiceLigne).Cells(3).Value
    		lotsEdit = dataGridXML.Rows(IndiceLigne).Cells(4).Value
    		consigneEdit = dataGridXML.Rows(IndiceLigne).Cells(5).Value
     
    		Dim fConsigne As New Form3(dateEdit,typeEdit,toolEdit,statutEdit,lotsEdit,consigneEdit)
     
    		If fConsigne.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
    			dataGridXML.Rows(IndiceLigne).Cells(0).Value = dateEdit	
    		End If
     
    		fConsigne.Dispose
     
    	End Sub
    et pour ma form3 (je test qu'avec une seule variable pour commencer):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Public Sub New(byref dateEdit As string,byref typeEdit As string,byref toolEdit As string,byref statutEdit As string,byref lotsEdit As string,byref consigneEdit As String)
     
    		Me.InitializeComponent()
     
    		textBox_Date.Visible = True
    		textBox_Date.Text = dateEdit
    	End Sub
    puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub ButtonEditerClick(sender As Object, e As EventArgs)
     
    		dateEdit = textBox_Date.text
    		Hide()
     
    End Sub
    d'abord ma variable dateEdit n'est pas "déclarée" (dans la sub buttonEditerClick) alors que passé en référence dans le constructeur de la form
    Ensuite dans MainForm, je n'entre jamais dans la condition (en mettant en commentaire "dateEdit = textbox_Date.text" dans la sub ButtonEditerClick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If fConsigne.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
    J'ai dans l'idée que ma déclaration "public" de mes variables dans MainForm n'est pas au bon endroit mais bon ...

    merci d'avance et merci chaparo pour le lien vers le Singleton ça va m'aider pour la suite

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Déjà tu pourrais faire une classe Edit qui possède tes 6 variables ca t'éviterais d'avoir des constructeur a ralonge.

    Je ne suis pas sur que la fonction Hide envoi un ShowDialogResult tu devrais peu être plus utiliser Me.Close() avec Me.ShowDialogResult = OK.

    Ce n'est pas par ce que tu Close ton élément qu'il est dispose.

    Enfin je dirais que c'est plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If fConsigne.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
    	dataGridXML.Rows(IndiceLigne).Cells(0).Value = fConsigne.dateEdit	
    End If
    Enfin au lieu de les mettre public tu pourrais les mettre en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public property read only

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Pourquoi ne pas créer une classe en accès partagé (Shared) dans laquelle tu places tes propriétés publiques ??? (Après tout dépends du fonctionnement de ton projet, l'instace est peut-être plus adaptée.....à voir..... )

    Voilà ce que ça pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
      Public Class Cls_DataValues
     
            Public Property dateEdit As String
            Public Property typeEdit As String
            Public Property typeEdit As String
            Public Property typeEdit As String
            '.......etc.......
            '.......................
     
            Public shared Sub CleanUpValues  
                dateEdit = String.empty
                typeEdit = String.empty
                typeEdit = String.empty
                typeEdit = String.empty
            End Sub
     
        End Class
    Tu y accèdes de n'importe quel endroit de ton projet en lecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox(Cls_DataValues.dateEdit)
    ...puis en écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cls_DataValues.dateEdit = "Blablabla"

    Ce n'est qu'une solution parmis tant d'autres.


    A+

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Merci pour vos solutions !

    Je vais retenter de créer une class, la première fois je ne l'avais pas mise en "shared" peut-etre la raison de son "indisponibilité" sur la form3.
    Par contre pour la class, dois-je rajouter un fichier où j'inscrit ma class, ou l'inscrire dans le fichier contenant le code de ma form principale est juste ? (oula je sais pas si je suis clair -.-)

    Merci pour l'histoire du close, j'étais parti du principe que le close fait le dispose implicitement. Je vous tiens au jus de ce que j'aurai réussi a faire.

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par didou038 Voir le message
    Merci pour vos solutions !

    Je vais retenter de créer une class, la première fois je ne l'avais pas mise en "shared" peut-etre la raison de son "indisponibilité" sur la form3.
    Oui ca venait certainement de là


    Par contre pour la class, dois-je rajouter un fichier où j'inscrit ma class, ou l'inscrire dans le fichier contenant le code de ma form principale est juste ? (oula je sais pas si je suis clair -.-)
    Pour une question de lisibilité dans tes projets, il éviter de tout placer dans un même fichier !! Donc je te suggère de créer une autre classe.

    A+ et bon codage

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Merci à tous les 2 !

    en combinant vos 2 solutions tout marche (jusqu'à maintenant ^^)

    Je commence à mieux comprendre grâce à vous ! Dur dur de se remettre à coder après 10 années d'abstinence

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème passage de paramètre entre form
    Par Zhamy dans le forum C#
    Réponses: 5
    Dernier message: 03/05/2010, 17h30
  2. Passage de paramètre entre form
    Par Syriel dans le forum Windows Forms
    Réponses: 9
    Dernier message: 04/06/2009, 15h54
  3. Passage de paramètres entre form
    Par thierry007 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/02/2007, 12h21
  4. [Forms 6i] Passage de paramètres entre forms
    Par tmcgrady dans le forum Forms
    Réponses: 8
    Dernier message: 18/03/2006, 03h04
  5. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo