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

Windows Forms Discussion :

[C# VS 2005 Express] Form/List/ListBox/RichTextBox interactions


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut [C# VS 2005 Express] Form/List/ListBox/RichTextBox interactions
    Je construis, depuis une Form1, une Form2 se présentant sous la forme de 2 boutons (sauver et quitter) d'une ListBox et d'une RichTextBox.
    La ListBox contient un nom (String) et la RichTextBox contient un synopsis (String)
    La form2 est construite avec différentes listes, depuis la 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
     
    ...
    private void b1ToolStripMenuItem_Click(object sender, System.EventArgs e)
    {
                Form2 b1EditWindow = new Form2();
                b1EditWindow.Text = "Livres";
                b1EditWindow.PopulateForm2(b1List);
                b1EditWindow.ShowDialog();
    }
    private void b2ToolStripMenuItem_Click(object sender, System.EventArgs e)
    {
                Form2 b2EditWindow = new Form2();
                b2EditWindow.Text = "BD";
                b2EditWindow.PopulateForm2(b2List);
                b2EditWindow.ShowDialog();
    }
    ...
    et la form2 gére, via une copie de la liste, l'affichage dans la ListBox et la RichTextBox :
    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
     
    List<Class1> localList;
    ...
    public void PopulateForm2(List<Class1> myClass1)
    {
       // work with local list copy
       localList = myClass1;
       int i = 0;
       while (i < localList.Count)
       {
          listBox1.Items.Add(localList[i].Id);
          i++;
       }
       richTextBox1.Clear();
    }
     
    private void button2_Click(object sender, System.EventArgs e)
    {
       int i = 0;
       while (i < localList.Count)
       {
           if (localList[i].State == "T" || localList[i].State == "V")
           {
                // save original list
                // ???
           }
        }
    }
     
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       int index = listBox1.SelectedIndex;
       richTextBox1.Clear();
       richTextBox1.AppendText(localList[index].Contents);
       richTextBox1.Modified = false;
    }
     
    private void richTextBox1_Leave(object sender, EventArgs e)
    {
       if (richTextBox1.Modified)
       {
          // update localList[i].Contents with modified synopsis
          // msgBox for test purpose
          MessageBox.Show("Text modified",
                                    "Info",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information)
       }
    }
    Voici les problèmes que j'ai :
    1) Lorsque je modifie un synopsis, puis que je sélectionne un autre choix de la ListBox, je ne passe jamais dans la méthode richTextBox1_Leave. Comment puis-je détecter la modification d'un synopsis ?
    2) Lorsque je vais activer le bouton "Sauver", je veux que la liste originale (celle qui est passé en argument de la méthode PopulateForm2) soit mise à jour et retrouver ces modifications dans la Form1 (b1List ou b2List selon) mais je ne vois pas comment faire. Comment pourrais-je procéder ?

    Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Le problème 1 est résolu, j'avais oublié, par méconnaissance des mécanismes du C#, d'ajouter, dans le fichier Form2.designer.cs la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.richTextBox1.Leave += new System.EventHandler(richTextBox1_Leave);
    Pour le second problème, je pourrais éventuellement passer par un fichier temporaire écrit par la Form2 et lu par la Form1 mais cette solution ne me semble pas élégante.

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Pour le pb 2, tu met tout simplement à jour localList et tu fais un accesseur publique dessus.

    Ainsi, après, tu fais juste appel, depuis Form1, à cet accesseur et tu récupères ta liste mise à jour.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Morpheus
    Pour le pb 2, tu met tout simplement à jour localList et tu fais un accesseur publique dessus.

    Ainsi, après, tu fais juste appel, depuis Form1, à cet accesseur et tu récupères ta liste mise à jour.
    Si je te suis bien, je déclare, dans Form2 :
    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
     
    private List<Class1> localList;
    public 	List<Class1> LocalList {
    	get {
    		return localList;
    	}
    }
    ...
    private void richTextBox1_Leave(object sender, EventArgs e)
    {
       if (richTextBox1.Modified)
       {
           int i = listBox1.SelectedIndex;
          // update localList[i].Contents with modified synopsis
          localList[i].Contents = richTextBox1.Text;
       }
    }
    et depuis form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
                b1EditWindow.PopulateForm2(b1List);
                b1EditWindow.ShowDialog();
                b1List = LocalList.get()
    ...
    mais si la Form2 est fermé, l'objet localList sera détruit et inacessible, non ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    J'ai finallement changé la philosophie de mon application et j'ai supprimer le bouton "sauver" et passer les listes via le mot clef ref. Comme ça les listes de départs sont modifiées directement.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/06/2007, 13h23
  2. Réponses: 11
    Dernier message: 19/02/2007, 09h13
  3. [IDE] Visual Studio 2005 Express
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 130
    Dernier message: 23/12/2006, 15h08
  4. [SQL server 2005 express] liste des erreurs SQL serveur 2005
    Par critok dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/05/2006, 19h17
  5. [Forms] : liste d'éléments
    Par JuRu dans le forum Forms
    Réponses: 3
    Dernier message: 01/06/2004, 12h18

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