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#]Indexation d'objet, out of memory


Sujet :

Windows Forms

  1. #1
    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 [c#]Indexation d'objet, out of memory
    Bonjour,

    je souhaite représenter les places d'un théâtre sur un form 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 (comme on pouvait le faire en VB6). J'ai donc utilisé 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, enfin je pense car il réinitialise des variables à chaque fois, pourtant, je vais des "dispose" en fin de procédure.

    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 ?

    Pour vous aider à comprendre mon problème 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

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut
    'jour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CheckBox)cntrl).checked= true;
    Ps: ne crée pas de nouveau CheckBox utilise l'objet que tu as recuperer ET caster pour le modifier.

Discussions similaires

  1. [pb mémoire] out of memory d'eclipse
    Par Casp dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/05/2005, 16h39
  2. Out of memory
    Par shurato dans le forum ANT
    Réponses: 1
    Dernier message: 10/11/2004, 16h19
  3. Réponses: 10
    Dernier message: 21/09/2004, 16h44
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03

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