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 :

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


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut Erreur lors de la création d un handle de fenêtre
    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. 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".
    Quelqu'un pourait m'aider?
    Merci bp
    Cédric

  2. #2
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Bonjour.
    C'est peut-être du au fait qu'il n'y a plus de place dans ta form...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    C'est quoi que tu appelles "plus de place"? parce que y'a une scrollbar

  4. #4
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Ben je me disais genre que si il ne trouve plus de place où déposer un control créé ben il renvoi une erreur mais si t'as une scrollbar y'a pas de raison...

    Ben écoute je ne sais pas désolé.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Je précise pardon j'ai une scrollbar sur la fenetre pas sur les Panels. Je ne sais pas si c'est un détail interressant mais bon

    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void Form1_Load(object sender, EventArgs e)
    {
                MonControl MonControl1 = new MonControl(1);
                this.Controls.Add(MonControl1);
    }
    Puis créer la classe suivante :
    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
    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();
            }
            public void 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.Parent as MonControl).AjusterHauteur(nsave);
                MonControl1.MaTextBox.Text = MonControl1.Name;
                MonControl1.MaTextBox.Focus();
                MonControl1.PushButon();
            }
            public void AjusterHauteur(int nsave)
            {
                int nsave2 = this.Height;
                this.Height += this.Controls[this.Controls.Count - 1].Height - nsave;
                if (this.Parent.GetType() == typeof(MonControl))
                    (this.Parent as MonControl).AjusterHauteur(nsave2);
            }
        }
    }
    A lexecution, cliquer sur le bouton et le reste se fait tout seul jusqu'au plantage.
    Si quelqu'un a une idée.... je suis preneur
    Cédric

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Il faut mettre pour Form1 Autoscroll = true

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Voici une partie du message d'erreur si ca peut etre utile...
    L'exception System.ComponentModel.Win32Exception n'a pas été gérée
    Message="Erreur lors de la création d'un handle de fenêtre."
    Source="System.Windows.Forms"
    ErrorCode=-2147467259
    NativeErrorCode=87
    StackTrace:
    à System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
    à System.Windows.Forms.Control.CreateHandle()
    à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    à System.Windows.Forms.Control.CreateControl()
    à System.Windows.Forms.Control.ControlCollection.Add(Control value)
    Cedric bloqué de chez bloqué

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Tu es sur que le Handle de ton contrôle parent est créé ?

    Tu peux t'en assurer de deux manières :

    - en stockant la valeur de la propriété Handle (dans ce cas, il attend tout simplement que le Handle soit créé).

    - en interceptant l'event HandleCreated et en démarrant la création de tes contrôles depuis le handler d'event.

    Et, tout bêtement, la propriété AutoSize de ton Panel est bien à true ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Sur le plantage j'ai (this.Controls.Add(MonControl1);):

    this.Handle
    8521844

    MonControl1.Handle
    6621236

    pardon j'ai oublié. Non j'ai pas mis autosize a true

  10. #10
    Candidat au Club
    Profil pro
    Developpement
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Developpement

    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 3
    Points
    3
    Par défaut ObjectUSER
    Bon, ca fait près de 10ans, donc je pense que tu n'en a plus besoin, mais ca peut être utile pour d'autre donc voici la solution :

    Lorsqu'on créer des controls utilisateur (entre autre) il faut garder en tête qu'un certains nombre d'objet USER sont créés par le système. Ce nombre est visible depuis le gestionnaire de tâches Windows, en ajoutant la colonne "ObjectsUSER". Or ce nombre est limité à 10000. Au delà, plus aucun handle ne peut être créé pour l'application. Et lors d'une tentative de création de control, de fenêtre ou autre, l'exception dont il est question se produit.

    Il faut donc veiller à ne pas dépasser cette limite de 10000 (qui peut être atteinte plus vite qu'on ne le pense !) en pensant à bien faire un Dispose() sur les éléments graphique qui ont été supprimée par l'utilisateur.

    En espérant que cela puisse en aider certains !

    @+

Discussions similaires

  1. VB.NET : Erreur lors de la création d'un handle de fenêtre
    Par Mikelester12 dans le forum VB.NET
    Réponses: 7
    Dernier message: 13/07/2007, 00h26
  2. Réponses: 3
    Dernier message: 24/08/2006, 10h46
  3. Réponses: 1
    Dernier message: 26/05/2005, 12h24
  4. message d'erreur lors de la création de la base
    Par ber_jp dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/05/2004, 12h15
  5. message d'erreur lors de la création d'une base
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/04/2004, 15h47

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