begin process at 2012 02 10 05:55:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Erreur lors de la création d un handle de fenêtre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Erreur lors de la création d un handle de fenêtre

samedi 18 avril 2009 à 15:31:50 | Erreur lors de la création d un handle de fenêtre

cedric3333

Bonjour a tous,
voila j'ai un problème depuis plusieurs mois que j'avais laissé de coté en me disant que je trouverai la solution plus tard. Mais bon voila je n'arrive toujours pas a le résoudre, et c'est tres important poru moi de trouver la solution. En fait j'ai un Panel1 constitué de 2 UserControl :
Le 1er : UserControl constitué d'un label et d'un textBox
Le 2eme : UserControl constitué d'un Label, une combobox et un bouton (avec une image).
Quand je clique sur le Bouton dans le UserControl2 je crée un Panel1 (donc constitué des 2 UserControl) et ainsi de suite. Ceci me permet d'afficher des hiérarchies. Si je fais 13 fois l'opération je prends le message d'erreur "Erreur lors de la création d un handle de fenêtre".

Voici comment reproduire le problème simplement. Avec cet exemple ca plante au niveau 45.
1) créer une applicaiton WinForms, avec un Form1. Mettre :
privatevoid Form1_Load(object sender, EventArgs e)
{
            this.autoscroll = true
            MonControl MonControl1 = new MonControl(1);
            this.Controls.Add(MonControl1);
}
Puis créer la classe suivante :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    class MonControl :Panel
    {
        public TextBox MaTextBox = new TextBox();
        private Button MonBouton = new Button();
        public MonControl(int nIdent)
        {
            this.MaTextBox.Dock = System.Windows.Forms.DockStyle.Top;
            this.MaTextBox.Location = new System.Drawing.Point(0, 0);
            this.MaTextBox.Size = new System.Drawing.Size(601, 20);
            this.MaTextBox.TabIndex = 0;
 
            this.MonBouton.Dock = System.Windows.Forms.DockStyle.Right;
            this.MonBouton.Location = new System.Drawing.Point(526, 20);
            this.MonBouton.Size = new System.Drawing.Size(75, 26);
            this.MonBouton.MaximumSize = new System.Drawing.Size(75, 26);
            this.MonBouton.TabIndex = 1;
            this.MonBouton.Text = "MonBouton";
            this.MonBouton.UseVisualStyleBackColor = true;
            this.MonBouton.Click += new EventHandler(MonBouton_Click);
 
            this.Controls.Add(this.MonBouton);
            this.Controls.Add(this.MaTextBox);
            this.Dock = System.Windows.Forms.DockStyle.Top;
            this.Location = new System.Drawing.Point(0, 0);
            this.Name = nIdent.ToString();
            this.Size = new System.Drawing.Size(601, 46);
        }
 
        void MonBouton_Click(object sender, EventArgs e)
        {
            this.PushButon();
        }
        publicvoid PushButon()
        {
            int nsave = this.Height;
            MonControl MonControl1 = new MonControl(Convert.ToInt32(this.Name) + 1);
            MonControl1.Dock = System.Windows.Forms.DockStyle.Bottom;
            MonControl1.MaximumSize = new Size(this.Width - 10, 20000000);
            this.Controls.Add(MonControl1);
            this.Height += MonControl1.Height;
            if(this.Parent.GetType() == typeof(MonControl))
                (this.Parentas MonControl).AjusterHauteur(nsave);
            MonControl1.MaTextBox.Text = MonControl1.Name;
            MonControl1.MaTextBox.Focus();
            MonControl1.PushButon();
        }
        publicvoid AjusterHauteur(int nsave)
        {
            int nsave2 = this.Height;
            this.Height += this.Controls[this.Controls.Count - 1].Height - nsave;
            if(this.Parent.GetType() == typeof(MonControl))
                (this.Parentas MonControl).AjusterHauteur(nsave2);
        }
    }
}
 A lexecution, cliquer sur le bouton et le reste se fait tout seul jusqu'au plantage.
Quelqu'un pourait m'aider?
Merci bp
Cédric
samedi 18 avril 2009 à 17:13:00 | Re : Erreur lors de la création d un handle de fenêtre

Tilois

Bonjour, Chaque user control crée des "objets USER" qui correspondent à peut prêt au nombre de controles enfants se trouvant dans le user control. La création d'un nouveau user control avec en son sein X sous controles, crééra dans le système X nouveaux objets USER. Vous semblez faire cette opération un certain nombre de fois. Or de mémoire il me semble que le système peut au mieux contenir 10000 objets USER simultanément (par utilisateur et par session). Ce nombre peut etre vu dans le taskmanager (ne pas oublier d'afficher la colonne intitulée "Objets USER"). La solution consisterait à diminuer le nombre d'objets créés, en revoyant par exemple l'architecture de l'application. En espérant vous avoir aidé, je vous souhaite une bonne fin de journée
samedi 18 avril 2009 à 18:03:10 | Re : Erreur lors de la création d un handle de fenêtre

cedric3333

Bonjour,
merci beaucoup pour ta réponse. Comment tu fais pour voir le nombre de Objets USER? je n'y arrive pas
dimanche 19 avril 2009 à 09:09:51 | Re : Erreur lors de la création d un handle de fenêtre

Tilois

C'est une colonne à ajouter dans le taskmanager: Menu affichage -> Sélectionner les colonnes. La tu choisis objets USER.
dimanche 19 avril 2009 à 10:03:26 | Re : Erreur lors de la création d un handle de fenêtre

cedric3333

Merci. Alors je viens de regardé. Lorsque mon programme plante, j'ai en tout j'ai 2800 objets USER dont 148 pour mon aplli.
dimanche 19 avril 2009 à 21:12:35 | Re : Erreur lors de la création d un handle de fenêtre

Robert33

Membre Club

Bonsoir

 

C'est étrange, cela ne devarit pas planter aussi vite.

J'ai essayé ton code et effectivement ça plante à 46 iterrations.

Mais je me demande si le probleme vient du nombre de controles ou de la profondeur des user-controles.

 

J'ai fais le test suivant:
Modification du constructeur pour passer la forme Parent
Au lieu d'ajouter le nouvel MonCcontrol dans la liste des controles de son Parent, je l'ajoute à celle de la Form mère, et là je n'ai plus de plantage, mais par contre j'ai un probleme de performance au dessus de 128 iterrations.

J'ai limitter le nombre d'iterrations à 255, et j'ai effectivement ces 255 MonControl d'affichés.

class MonControl : Panel
{
   public  TextBox MaTextBox = newTextBox();
   private  Button MonBouton = newButton();
   Form  _ParentForm = null;
   private  staticint counter = 0;
   public  MonControl(int nIdent, Form parent)
   {
      counter++;
      _ParentForm = parent;
   ...
   }

   public void PushButon()
   {
   ...

   _ParentForm.Controls.Add(MonControl1);
   ...
   if (counter < 255)
      MonControl1.MonBouton.PerformClick();
   }
...
}



g, enjoy it!

lundi 20 avril 2009 à 09:19:08 | Re : Erreur lors de la création d un handle de fenêtre

cedric3333

Bonjour,
merci beaucoup pur ta réponse. C'est effectivement tout mon probleme : la profondeur m'est tres utile et est tres importante. Ce qui me gene c'est que dans mon exemple ca plante au niveau 46 mais dons mon programme (qui est plus complexe) ca plante au niveau 12, et ca c'est tres pénalisant. Tu pense que c'est une limitation du système?
Cédric


Cette discussion est classée dans : system, using, moncontrol, monbouton, moncontrol1


Répondre à ce message

Sujets en rapport avec ce message

API? [ par BlackWizzard ] en C, j'avait un prog du genre ::SetWindowPos(FindWindow("ConsoleWindowClass",NULL),HWND_TOP,0,0,0,0,SWP_SHOWWINDOW); (C pour chacher le console dos d [C#] CopyTo => Pb de copy [ par adrien78 ] J' ai absolument besoins de récréer la fonction CopyTo en C#=> Cependant j' ai deux pb : - Le fichier copié ne peut pas être lu (érreur de copie Pb avec mon WebService : perte de variable [ par vow ] Bonjour @ tousJe me suis mis au C# depuis peu de temps, et je crée mon premier WebService.Un client appelle ce WS.Mon problème est que j'ai l'impressi plantage du prog [ par shinevilkyo ] lu all,j ai code un explorateur win en csharp eilmarche super sur le dd ou sur tt disque logique mais kan le contenue est trop gros a afficher ds une Definition [ par GazGaz ] lu voila je code en c# et en haut de chacune de mes pages il y a : ________________________________using System;using System.Collections;using System. Serialization Soap [ par zaka48 ] j'ai un probleme avec la declaration de l'esapce de nom using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Soap;c'est ce Word C# [ par pete87150 ] Bonjour,Je voudrais savoir comment ouvrir un document Word en C#, quelle référence ou directive utiliser etc.Voici mon code simplifié qui ne marche pa [C#] [XML] dataSet [ADO.NET] [ par oboudou ] Je ai copier ce code d'un tutorial de developpez mais je n'est pas réussi a l'addapter pour lire une base de donné dans un fichier xml. Si on peut me Erreur dont j'arrive pas a me débarrasser [ par patemino ] En C# avec #developusing System;using System.Windows.Forms;using System.IO;Dans une classe nommée repertoire :public class Répertoire {p Souci avec placeholder [ par MorpionMx ] Bonjour, J'ai un petit souci de placeholder qui n'affiche aucun controle.Pourtout, ca doit etre si simple, je me demande ce que je fais pas bien.J'ai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales