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 :

Indexage d'objets en VB Net ? Possible ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Par défaut Indexage d'objets en VB Net ? Possible ?
    Bonjour à toutes et à tous,

    Je dois migrer une application de VB6 vers VB Net.
    Mon application contient beaucoup d'objets indéxés.
    Exemple :
    L'object : TextBox
    Ma forme contient 35 TEXTBOX t ils ont le MÊME nom avec une propriété INDEX de 1 à 35 comme suit :
    TXT_Ident (1)
    TXT_Ident (2)
    ...
    ...
    TXT_Ident (35)


    Quand je passe en VB Net, La propriété INDEX n'existe pas.
    Alors l'instruction suivante :
    for i=1 to 35
    TXT_Ident(i).BackColor = red
    next i

    devient hyperlourde à gérer en VB net.

    Question : Comment faire pour ne pas alourdir mon code VB net en répétant par exemple 35 fois l'instruction suivante ?
    TXT_Ident(1).BackColor = red
    TXT_Ident(2).BackColor = red
    ...
    TXT_Ident(35).BackColor = red


    Merci beaucoup.

    Mkel

  2. #2
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Une boucle c'est alourdir son code ?
    T'as pas tout compris à l'informatique toi...

    Sinon tu peux aussi implémenter ta propre Textbox (class dérivant de TextBox) et mettre dans le constructeur BackColor = mycolor
    Mais bon... au final, niveau perf c'est exactement pareil : le changement de couleur se fera toujours 35 fois (une fois pas instance)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Par défaut MadreDios, Ohhh la CATA.....
    Citation Envoyé par Mose
    Une boucle c'est alourdir son code ?
    T'as pas tout compris à l'informatique toi...
    12 ans de VB et je débute en VB Net.

    Mais c'est toi que je piges pas. On m'a toujours appris en Algorithmique la notion d'optimisation de l'écriture du code en générant des boucles sur des ensembles répétitives. T'imagines si j'ignore la notion d'INDEX ? La CATA....

    On va pas programmer comme chez les Roumains tout de même ?

    Dernièrement, sur un projet en VB6 réalisé par eux, je suis intervenu et j'ai remplacé TOUTES les instructions répétitives (§ mon exemple ci-dessus) par des boucles. le projet est passé de 8000 lignes à 5200 lignes. ( et le binaire de 5 Mo à 3.2 Mo)

    T'as appris l'informatique ches DARTY ou koi ?

    Bon..Depuis mon messsage, j'ai trouvé une combine pour indexer mes controles répétitifs.

    Merci tout de même.
    mkel

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par mkel
    Dernièrement, sur un projet en VB6 réalisé par eux, je suis intervenu et j'ai remplacé TOUTES les instructions répétitives (§ mon exemple ci-dessus) par des boucles. le projet est passé de 8000 lignes à 5200 lignes. ( et le binaire de 5 Mo à 3.2 Mo)
    Attention, c'est bien beau de réduire les lignes de code ou le poid de l'exécutable mais si c'est pour que les performances de l'application en souffre, aucun intérêt....

    Tu veux un code "efficace" sans faire trop de boucle ? Alors regarde ce pseudo code:

    pour chaque ctrl c dans les_controles_de_ta_form
    si c est une TextBox
    c.BackColor = Red



    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Par défaut
    Citation Envoyé par Morpheus
    pour chaque ctrl c dans les_controles_de_ta_form
    si c est une TextBox
    c.BackColor = Red



    A+
    MadreDios.. ...
    C'est comme si tu avais lu dans mes pensées. Parceque c'est EXACTEMENT ce que j'ai fait, avec un petit ajout : Je sélectionne UNIQUEMENT les textbox que JE VEUX.


    pour chaque ctrl c dans les_controles_de_ta_form
    si (c est une TextBox et si c.name = "xxx") ' xxx = le nom du textbox
    c.BackColor = Red

    Comme koi, les grands esprits se rencontrent qqfois...

    Mais qd même optimiser le code dans le TEMPS (vitesse) et dans l'ESPACE (mémoire), c'est le but non ?

    mkel

  6. #6
    pdl
    pdl est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 30
    Par défaut Indexation d'objet en C#
    Bonjour,

    Je rencontre un peu le même genre de problème (mais en C#) dans le sens où je souhaite représenter les places d'un théâtre et du coup, j'ai 720 CheckBox sur mon form (oui rien que ça). Là où j'ai surtout un problème, c'est que dès que je fais trois refresh de mon form, j'ai un out of memory, donc je cherche à optimiser mon code et j'ai donc aussi voulu utiliser un INDEX, mais pas possible. J'ai donc fait comme vous en utilisant le "pour chaque ctrl c dans les_controles_de_ta_form", vérifié que c'est un checkbox par "si c est checkbox" et là, pas de bol, pas moyen de faire directement
    c.checked = true; car la propriété n'est pas directement connue, je dois avant faire
    CheckBox cb = new CheckBox();
    cb = (CheckBox)cntrl;
    cb.checked = true;


    Ce que je n'aime pas, car je dois chaque fois recréer un objet de type CheckBox alors qu'il existe. Idem pour y assigner un tooltip, ce qui fait que j'arrive à un out of memory.

    comment est-ce que je pourrais faire pour ne pas rencontrer ce problème ? Comment est-ce que je pourrais directement utiliser mes checkbox qui sont définis dans le form ?

    Voici le code
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
     
    namespace WindowsApplication1
    {
        public partial class PlaceForm : Form
        {
            public CheckBox[] c = new CheckBox[721];
            public ToolTip[] tooltip = new ToolTip[721];
            public PlaceForm()
            {
                InitializeComponent();
                RefreshPlace();
            }
     
            private void PlaceForm_Load(object sender, EventArgs e)
            {
     
            }
     
     
            public void RefreshPlace()
            {
     
                String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=theatre.mdb";
                using (OleDbConnection connection = new OleDbConnection(connectionString))
                {
                    String queryString = "SELECT * FROM PlacePublic";
                    OleDbCommand command = new OleDbCommand(queryString, connection);
                    connection.Open();
                    OleDbDataReader reader = command.ExecuteReader();
                    int id_siege;
                    String rang;
                    String siege;
                    String Nom;
                    Boolean disponible;
                    Boolean Vip;
     
                    //ToolTip tooltip = new ToolTip();
                    while (reader.Read())
                    {
                        id_siege = (int)reader["ID_siege"];
                        rang = reader["rang"].ToString();
                        siege = reader["siege"].ToString();
                        Nom = reader["Nom"].ToString();
                        disponible = (Boolean)reader["Disponible"];
                        Vip = (Boolean)reader["VIP"];
     
                        foreach (Control cntrl in this.Controls.Find("CheckBox" + id_siege, true))
                        {
                            if (cntrl is CheckBox)
                            {
                                //Console.WriteLine(cntrl.Name +" "+ id_siege + " " + rang + " " + siege + " " + Nom);
                                //CheckBox c = new CheckBox();
                                //c = (CheckBox)cntrl;
     
                                c[id_siege] = (CheckBox)cntrl;
                                if (Nom.Equals(""))
                                    c[id_siege].Checked = false;
     
                                else
                                    c[id_siege].Checked = true;
                                tooltip[id_siege] = new ToolTip();
                                tooltip[id_siege].AutomaticDelay = 10;
                                tooltip[id_siege].AutoPopDelay = 10000;
                                if (Vip)
                                {
                                    tooltip[id_siege].ToolTipTitle = "Place VIP" + rang + " " + siege;
                                    tooltip[id_siege].BackColor = Color.AliceBlue;
                                }
                                else
                                    tooltip[id_siege].ToolTipTitle = "Place " + rang + " " + siege;
                                if (Nom.Equals(""))
                                {
                                    tooltip[id_siege].SetToolTip(c[id_siege], "Libre");
                                    c[id_siege].BackColor = Color.Green;
     
                                }
                                else
                                {
                                    c[id_siege].BackColor = Color.Red;
                                    tooltip[id_siege].SetToolTip(c[id_siege], "Réservé par " + Nom + " ");
                                }
                                if (!disponible)
                                {
                                    c[id_siege].Enabled = false;
                                    c[id_siege].Visible = false;
                                }                            
                            }
                        }
     
                    }
     
                    reader.Close();                
                    connection.Close();
                    reader.Dispose();
                    command.Dispose();                
                    connection.Dispose();
     
     
                }
     
            }
     
            private void RefreshButton_Click(object sender, EventArgs e)
            {
                this.RefreshPlace();
            }
     
            private void PlaceForm_FormClosed(object sender, FormClosedEventArgs e)
            {
                this.Dispose(true);
            }
        }
    }
    D'avance merci,
    Pierre

  7. #7
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par mkel
    12 ans de VB et je débute en VB Net.

    Mais c'est toi que je piges pas. On m'a toujours appris en Algorithmique la notion d'optimisation de l'écriture du code en générant des boucles sur des ensembles répétitives. T'imagines si j'ignore la notion d'INDEX ? La CATA....

    On va pas programmer comme chez les Roumains tout de même ?

    Dernièrement, sur un projet en VB6 réalisé par eux, je suis intervenu et j'ai remplacé TOUTES les instructions répétitives (§ mon exemple ci-dessus) par des boucles. le projet est passé de 8000 lignes à 5200 lignes. ( et le binaire de 5 Mo à 3.2 Mo)

    T'as appris l'informatique ches DARTY ou koi ?

    Bon..Depuis mon messsage, j'ai trouvé une combine pour indexer mes controles répétitifs.

    Merci tout de même.
    mkel
    Olala... j'ai rien capté moi.
    Visiblement j'ai pas compris ta question vu que je comprend pas la réponse.
    Dsl si je t'ai vexé, mais j'ai toujours pas compris ton pb avec une boucle... bon j'avoue je ne parle pas VB et INDEX ça me cause pas.

    My apologizes

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/10/2007, 12h27
  2. [C#] Serialisation d'un objet CellSet (ADOMD.NET)
    Par scifire dans le forum Services Web
    Réponses: 2
    Dernier message: 05/12/2006, 07h35
  3. Insérer un objet dans un canvas : possible ?
    Par gedeon555 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 04/06/2006, 14h42

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