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

C# Discussion :

Dépassement mémoire et contrôle utilisateur


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Par défaut Dépassement mémoire et contrôle utilisateur
    Bonjour à tous,

    Je suis actuellement en train de développer un contrôle utilisateur qui nécessite l'utilisation des méthodes Math.Cos() et Math.Sin().

    Mon problème intervient lorsque je test mon contrôle dans une fenêtre Winform, au moment où je le place, un message apparaît (à la place du contrôle) m'indiquant une erreur de dépassement. Après un peu de bidouille j'ai réussi à trouver d'où venait cette erreur :

    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
     
    private void pictBox_Paint(object sender, PaintEventArgs e) {
     
                Graphics g = e.Graphics;
                double angle, angle0;
     
                angle0 = -5*Math.PI/4; 
                angle = angle0 + (3*Math.PI/2)*(cadence-cadenceMin)/(cadenceMax-cadenceMin);
     
                pointAguille.X = pointCentre.X + (Int32)(65*Math.Cos(angle));
                pointAguille.Y = pointCentre.Y + (Int32)(65*Math.Sin(angle));
                g.DrawLine(new Pen(Color.Red, 3), pointCentre, pointAguille); // ICI CA PLANTE
     
                labelCadence.Rtf = @"{\rtf Cadence = {\b " + cadence + "} cps/min}";
    }
    Ce sont en fait les valeurs de pointAguille.X et Y qui provoquent le dépassement dans DrawLine mais je n'arrive pas à comprendre pourquoi ils atteignent des valeurs aussi grandes ...

    Merci d'avance pour votre aide !

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    A cause du cast en int32! la sortie de 65*cos ne donne pas un entier et tu essaies de la caster en int32 ce qui donne un truc faux! Il ne faut pas caster mais convertir (Convert.ToInt32())

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Par défaut
    Justement ! Depuis le début je convertissait bien avec Convert.Int32 mais ... exactement le même soucis.

    Voilà mon code d'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private void pictBox_Paint(object sender, PaintEventArgs e) {
     
                Graphics g = e.Graphics;
     
                angle = angle0 + (3*Math.PI/2)*(cadence-cadenceMin)/(cadenceMax-cadenceMin);
     
                pointAguille.X = pointCentre.X + Convert.ToInt32(Math.Cos(angle));
                pointAguille.Y = pointCentre.Y + Convert.ToInt32(Math.Sin(angle));
     
                g.DrawLine(new Pen(Color.Red, 3), pointCentre, pointAguille);
     
                labelCadence.Rtf = @"{\rtf Cadence = {\b " + cadence + "} cps/min}";
    }
    Edit : Et le plus étrange est que j'ai testé ce petit bout de code dans une application console, et il fonctionne nickel.

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

Discussions similaires

  1. Tests unitaires avec vbUnit sur des contrôles utilisateurs
    Par Patrick Mortas dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/09/2006, 18h06
  2. Analyseur code pour dépassement mémoire
    Par adrienj dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 13/07/2006, 21h53
  3. Réponses: 2
    Dernier message: 20/04/2006, 14h05
  4. [C#][VS2005]Contrôle utilisateur et saisie TextBox
    Par caelum dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/04/2006, 21h24

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