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

C# Discussion :

Récuperer dans un fichier Class.cs la valeur d'une TextBox contenu dans Form1


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Récuperer dans un fichier Class.cs la valeur d'une TextBox contenu dans Form1
    Bonjour,

    je suis novice dans le dev et je venais de commencé un projet en vb lorsque mon patron ma proposé une formation en C#. J'ai décidé de refaire mon projet en c# mais je rencontre des difficulté à le convertir.

    Pour récupérer la valeur une textbox dans un fichier class.vb j’utilisai pour exemple ( Form1.TextBox1.Text ), mais en C# cela ne fonctionne pas. En utilisant "Public static void" je parvient à appeler ma class dans la form1, mais l'inverse ne fonctionne pas.

    J'ai essayer de déclarer ma textbox en "public static void" mais cela appel "textBox_Retention_TextChanged" en non "textBox_Retention".

    Exemple code VB qui fonctionne bien:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Public Class Class_Infobulle_Purge
    
        Public Shared Function Infobulle_Retention_auto()
    
            ' Activation des messages infobulle dans la textebox
            '===================================================
            Dim infobulle = New ToolTip()
            infobulle.IsBalloon = True
            infobulle.OwnerDraw = True
            infobulle.ForeColor = Color.Red
            infobulle.ToolTipTitle = "Erreur de Saisie"
            infobulle.ToolTipIcon = ToolTipIcon.Error
    
            Dim texte_value_min As Integer = 1
            Dim texte_value_max As Integer = 365
    
            On Error GoTo ErrTextbox1
    
            ' Si la textBox est vide on ne vérifie rien
            '===========================================
            If (Form1.TextBox_Retention.Text = Nothing) Then
                Exit Function
            End If
    
            'Récupération et conversion de la largeur dans une variabler
            '==========================================================
            Dim texte_value As Integer
            texte_value = CInt(Form1.TextBox_Retention.Text)
    
            'Vérification de la valeur minimum et maximum entrée dans la textBox, Si la valeur saisie n'est pas correcte
            'on affiche un Message d'erreur et on vide la textBox
            '============================================================================================================
            If (texte_value > texte_value_max) Then
                infobulle.Show("Le Maximum de jours autorisé est de 365/J", Form1.TextBox_Retention, 0, -75, 3000)
                Form1.TextBox_Retention.Text = Nothing
            End If
    
            If (texte_value < texte_value_min) Then
                infobulle.Show("Votre Saisi 0 Jour est Interdite, Veuillez Séléctionner une Valeur de 1 à 465/J", Form1.TextBox_Retention, 0, -75, 3000)
                Form1.TextBox_Retention.Text = Nothing
            End If
            Exit Function
    
            'Message d'erreur
    ErrTextbox1:
            infobulle.Show("Veuillez Saisir Uniquement une Valeur Numérique pour la Période de Rétention", Form1.TextBox_Retention, 0, -75, 3000)
            Form1.TextBox_Retention.Text = Nothing
    
        End Function

    Exemple de code en C# qui ne parvient par à récupérer les valeur des ma textbox:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace Purge
    {
    
        class Class_infobulle
        {
            public static void test()
            {
                //Activation des messages infobulle dans la textebox
                //===================================================
                var infobulle = new ToolTip();
                infobulle.IsBalloon = true;
                infobulle.OwnerDraw = true;
                infobulle.ForeColor = Color.Red;
                infobulle.ToolTipTitle = "Erreur de Saisie";
                infobulle.ToolTipIcon = ToolTipIcon.Error;
    
                int texte_value_min = 1;
                int texte_value_max = 365;
    
                try
                {
                    // Si la textBox est vide on ne vérifie rien
                    //===========================================
                    if (string.IsNullOrEmpty(Form1.textBox_Retention.Text))   //ERREUR
                    { return; }
    
                    //Récupération et conversion de la largeur dans une variable
                    //==========================================================
                    int texte_value;
                    texte_value = Convert.ToInt32(Form1.textBox_Retention.Text);  //ERREUR

    En VB.net mes class communique avec les objet de la form1, mais pas en C#.

    Quelqu'un pourrait m'aider à comprendre d’où peut venir mon erreur.


    Merci

  2. #2
    Membre régulier Avatar de SultanGeek
    Homme Profil pro
    Ingénieur automatisme & IT
    Inscrit en
    Juin 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur automatisme & IT
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 70
    Points : 91
    Points
    91
    Par défaut
    Bonjour,essaie de mettre ta classe en public
    www.automation-sense.com - Tutoriel/Cours automatisme et informatique industrielle

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    C'est surtout le static qui n'est pas cohérent...
    Il te faut une instance de Form1 -->
    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
    22
    23
    24
    25
    26
    27
     
    Form1 f = new Form1();
    			if (string.IsNullOrEmpty(f.textBox_Retention.Text))   //ERREUR
    			{
    				MessageBox.Show("Merci de saisir une durée...");
    				return;
    			}
     
    			//Récupération et conversion de la largeur dans une variable
    			//==========================================================
    			int valeur = 0;
    			int valeur_min = 1;
                int valeur_max = 365;
    			if(!int.TryParse(f.textBox_Retention.Text, out valeur))
    			{
    				MessageBox.Show("La valeur saisie n'est pas un chiffre...");
    				return;
    			}
     
    			 /*Vérification de la valeur minimum et maximum entrée dans la textBox, Si la valeur saisie n'est pas correcte
    			 on affiche un Message d'erreur et on vide la textBox
    			===========================================================================================================*/
    			if (valeur < valeur_min || valeur > 365)
    			{
    				MessageBox.Show("La valeur saisie n'est pas comprise entre 1 et 365");
    				return;
    			}
    Après je ne comme tu es débutant je ne sais pas où se situe ta connaissance. Expliques plutôt ce que tu veux faire avec cette classe ? Typiquement je vois mal pourquoi tu fais une classe infobulle qui est tellement spécialisée qu'elle n'est applicable qu'à la classe Form1...
    Fais plutôt tes contrôle de saisie dans ta classe Form1 et affiche une infobulle (ou bien un MessageBox comme mon exemple).

    Je te conseille vivement de lire un cours sur le C# ou sur tout langage objet car tu ne maitrise pas bien la notion d'instance et de statique.
    Par exemple un champ statique (static int toto = 3) est unique pour toutes les instances de ta classe.Tu pourras le modifier en faisant MaClasse.toto = 5.
    Un champ non statique nécessitera une instance : MaClasse obj = new MaClasse(); obj.toto = 5;
    Bref c'est juste pour te montrer ton erreur? Tu essayes d'accéder à une variable (ta textbox) sans instancier ta classe et ça c'est pas possible.

    Bonne continuation

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Merci pour votre retour, pour le moment je n'ai aucun support de formation ne l'ayant pas encore commencé. Je lie les tuto présent sur "developpez.net" est autre.

    La partie de code Tooltip() été un exemple, en faite je souhaite créer des .vbs différente selon certain condition. Tous fonctionne très bien quand je mais tous mon code dans Form1, mais je voulais pour mis retrouver plus facilement créer des fichiers class qui contient des "function" comme dans mon projet initiale en vb.net.

    J'ai essayer d'ajouter une instance de la Form1 "Form1 f1 = new Form1();" cela semble fonctionner mais aucune valeur n'est récupérer des textbox ou autre.

    Pour tester j'ai retirer "static" à "public void creat_file_vbs_default()" et dans ma form1 au niveau du bouton qui l'appel j'ai créer une instance "Class_Creation_VBS test = new Class_Creation_VBS();", mais cela ne donne rien les valeurs à présente mais TextBox et numericUpDown reste vide dans vbs générer.


    Voici une partie de mon code dans le fichier classe qui crée mon vbs:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
            
     namespace Purge
    {
    
        class Class_Creation_VBS
        {  public void creat_file_vbs_default()
            {
                Form1 f1 = new Form1();
    
                //=========================================================================================
                //= Vérification de la présence du répertoire et suppression du fichier purge.vbs =
                //========================================================================================
    
                //==============================
                // vérificattion répertoire =>ok 
                //==============================
    
                if (!Directory.Exists(f1.TextBox_Chemin.Text)) ====> Valeur textox non récupéré
                {
                    Directory.CreateDirectory(f1.TextBox_Chemin.Text);  ====> Valeur textox non récupéré
                }
                // Fin vérificattion répertoire =>ok 
    
                // Fin vérificattion fichier purge =>ok 
                
                if (File.Exists(f1.TextBox_Chemin.Text + @"\purge.vbs"))
                {
                    File.Delete(f1.TextBox_Chemin.Text + @"\purge.vbs");
                }
                //========================================           
                // Fin vérificattion fichier purge =>ok 
                //========================================
    
                //========================================
                //= Création du fichier purge_default.vbs =
                //========================================
                {
                    
                    System.IO.StreamWriter my_purge_vbs = new StreamWriter(f1.TextBox_Chemin.Text + @"\purge.vbs", true, System.Text.Encoding.Default);  ====> Valeur textox non récupéré 
    
                    //Ecriture du texte dans votre fichier
    
                    my_purge_vbs.WriteLine("");
                    my_purge_vbs.WriteLine("'Repertoire ou sont stockes les fichiers");
                    my_purge_vbs.WriteLine(@"Dossier_USERS = ""D:\xxxx""");
                    my_purge_vbs.WriteLine("");
                    my_purge_vbs.WriteLine("'Nombre de jours de conservation des Fichiers");
                    my_purge_vbs.WriteLine("AgeMaximalFichiers = " + "\"" + f1.numericUpDown1.Value + "\""); ==> Valeur non récupéré de mon numericupdown de ma Form1
                    
    my_purge_vbs.WriteLine("");
                    my_purge_vbs.WriteLine("'Comptage des fichiers effaces");
                    my_purge_vbs.WriteLine("NbFichiersEffaces = 0");
    
                    my_purge_vbs.Close();
    
                    return;
                }
    
            }

    Bouton dans Form1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         private void BT_Valider_IM_Click(object sender, EventArgs e)
            {
                Class_Creation_VBS test = new Class_Creation_VBS();
     
                if (Directory.Exists(@"D:xxxxx\Users"))
                 { Class_Creation_VBS.creat_file_vbs_default_IM(); }
                 else
                 { test.creat_file_vbs_modifier_IM(); }
     
                 Process.Start(Path.GetTempPath() + @"purge.vbs");


    Merci encore pour aide et explication précieuse.

  5. #5
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Si je comprend bien ton code, tu as une instance de Form1 qui sur le clic d'un bouton va créer une instance de Class_Creation_VBS et appeler une de ses méthodes qui elle même va créer une nouvelle instance de Form1.
    Y-a pas comme un problème là ?
    Et oui, tu as 2 instances de Form1 et tu cherche les infos dans la seconde.
    Quand tu fait un Form1 f1 = new Form1(); ça te créé une nouvelle instance.

    Ne serait-il pas mieux, de passer les infos dont tu as besoin en argument de ta méthode ?
    creat_file_vbs_default(string chemin) par exemple.
    Dans tous les cas, ça serait plus logique, et plus propre surtout.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Peux-tu nous donner plus d'information sur l'ensemble de ton code ?
    - L'ensemble des noms des fichiers (forms et classes)
    - Le contenu de Program.cs, histoire qu'on sâche ton point d'entrée

    Sinon, pour avoir longuement fait du VB6 avant de passer à C#, une chose effectivement perplexifiante, c'est qu'en VB6 :
    - Toutes les instances des Form sont globales, et accessibles directement à partir du nom de la Form, comme une classe statique.
    - Tous les contrôles Winform sont Threadsafe et synchrones, ce qui fait qu'on peut accéder directement à un Textbox.Text contenu dans une Form à partir d'une autre form ou d'une autre classe.
    - Toute form est ouverte à son instanciation et modale à son ouverture.

    En C#, ni l'un ni l'autre n'est vrai :
    - On n'accède à une instance de Form qu'explicitement via une instance locale.
    - Seule une Form peut accéder à ses propres controles sans risquer de planter.
    - Une form n'est par défaut pas modale, et pas affichée.

    Ce qui devrait donner, dans ton Program.cs :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Form1 frm = new Form1();
    DialogResult res = frm.ShowModal(this); // Affiche la Form1 et met le programme principale en pause
     
    if (res == DialogResult.Ok)
    {
         string path = frm.MonPathQuiVaBien;
    }

    Et dans ton Form1.cs
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public string MonPathQuiVaBien
    {
        get
        {
            return Textbox1.Text;
        }
    }


    -- Edit : Après relecture, vous n'avez visiblement pas besoin d'instance de Form1 dans vos classes. Il suffit de passer les éléments nécessaires en paramètres de vos méthodes contenues dans vos classes satellites.
    On ne jouit bien que de ce qu’on partage.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous est Merci,

    Je ne suis toujours pas parvenu appeller le contenu de ma textbox depuis un fichier class.cs.

    Comment passer les éléments nécessaires en paramètres dans une méthodes contenues dans une classes satellites ?

    Avez vous un exemple s'il vous plait ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par boomscud Voir le message
    Merci pour votre retour, pour le moment je n'ai aucun support de formation ne l'ayant pas encore commencé. Je lie les tuto présent sur "developpez.net" est autre.
    ces livres sont très bien, très pédagogiques, même en anglais c'est facile à lire, la v3 est encore mieux que la v2 :

    français: Maitrisez C# (VS2005) (Karli Watson - Wrox 2001) [version 2]
    => ne contient pas le C#3, les generiques, linq... mais c'est très bien si on lit que le français pour débuter.

    anglais: Beginning Visual C# 2008 (Karli Watson - Wrox 2008) [version 3]
    => contient tout ce qu'il faut generiques et linq inclus sauf l'entity framework, excellent pour débuter et tout comprendre pas à pas depuis le langage jusqu'aux winfoms, asp et ado.net. très valable même pour vs 2010 à 2015 si on est pas gêné par les quelques différences de copie d'écran entre les versions de l'IDE.

    y a pas à se priver d'investir une vingtaine d'euro dans ce livre.

    sinon pour les versions plus récentes d'autres auteurs avec la qualité wrox:
    http://www.wrox.com/WileyCDA/Section...id-105059.html
    http://www.wrox.com/WileyCDA/WroxTit...470502266.html

    je déconseille apress et oreilley pour commencer.

    un bon tutorial ne remplacera jamais un bon livre et un bon livre ne remplacera jamais un bon enseignant.

    concernant la problème, j'ai survolé les messages précédents et je n'ai pas compris de quoi il s'agissait mais les conseils de définir le modificateur du textbox en public si on veut y accéder depuis l'extérieur de la classe est correct et celui d'instancier la form est également correct.

    Nom : Presse-papiers-1.jpg
Affichages : 619
Taille : 46,9 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var form1 = new Form1()
    string s = form1.testBox.Text;
    Dernière modification par Invité ; 19/09/2015 à 21h06. Motif: un bon tutorial ne remplacera jamais un bon livre et un bon livre ne remplacera jamais un bon enseignant

Discussions similaires

  1. Sauver valeur d'une boucle for dans un fichier texte
    Par nikob88 dans le forum MATLAB
    Réponses: 8
    Dernier message: 25/05/2012, 15h18
  2. Réponses: 2
    Dernier message: 11/12/2011, 14h41
  3. Réponses: 0
    Dernier message: 17/03/2011, 21h42
  4. Réponses: 1
    Dernier message: 23/09/2009, 10h35
  5. afficher la valeur d'une variable contenue dans une DB
    Par titoumimi dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2006, 17h00

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