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 :

Cast pointF en Point


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Cast pointF en Point
    Bonjour à tous,

    Voilà je voudrais savoir s'il est possible de faire un convertion d'un PointF en Point ?

    Parce qu'avec Point il faut lui fournir des entiers, et le problème ce que j'ai des doubles comme valeurs.

    En vous remerciant d'avance pour vos aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 78
    Points
    78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float x = 1.035f; float y = 6.788f;
    PointF ptf = new PointF(x, y);
    Point pt = new Point(Convert.ToInt16(ptf.X), Convert.ToInt16(ptf.Y));
    Je te le fais très court, sans aucun contrôles sur les valeurs, sans try / catch. Le tout en sachant que tu ne t'es pas très étendu sur le contexte de ta question, ce qui peut faire varier la réponse.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Potus Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float x = 1.035f; float y = 6.788f;
    PointF ptf = new PointF(x, y);
    Point pt = new Point(Convert.ToInt16(ptf.X), Convert.ToInt16(ptf.Y));
    X et Y sont de type Int32, pas Int16... là tu risques de perdre des données si la valeur n'est pas entre -32768 et 32767

    De toutes façons, il existe plusieurs méthodes pour faire la conversion, selon la façon dont tu veux arrondir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    float x = 1.035f; float y = 6.788f;
    PointF ptf = new PointF(x, y);
    Point pt1 = Point.Round(ptf); // Arrondi au plus proche
    Point pt2 = Point.Truncate(ptf); // Arrondi en dessous
    Point pt3 = Point.Ceiling(ptf); // Arrondi au dessus

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Re bonjour,

    Merci pour vos réponses.

    Alors je vais expliquer pourquoi ai-je besoin de cela.

    Voilà je suis étudiant en informatique en suisse, et je dois réaliser un projet en c# et en objective-c.
    Le truc c'est que je ne maitrise pas très bien le c#.
    Dans mon application c#, j'ai une Windows form qui contient 4 checkbox,toolstrip et un panel.

    Et l'utilisateur à la possibilité d'ajouter un bouton ou une zone de texte dans le panel grâce à la toolstrip.

    Puis en fonction de ce qu'il a cocher comme checkbox la taille du panel change.

    Mon problème est que si l'utilisateur à cocher la checkbox A et qu'ensuite il coche une autre checkbox (la B par exemple).
    Lorsqu'il re coche la case A le bouton qu'il avait ajouté ne se retrouve pas tout a fait au même emplacement du panel qu'à l'origine ( c'est-a-dire la première fois qu'il avait coché la checkbox A).
    il y a toujours un petit décalage, qui augmente a chaque fois que l'utilisateur coche une autre checkbox.

    J'ai fait plein de code pour calculer ce qu'il fallait. Dans ce point -ci tous va. Mais le problème c'est quand je veux fixer l'emplacement du bouton.
    J'utilise bouton.location = new point();

    Le problème c'est qu'il veut un entier alors qu'avec mes calculs j'ai des chiffres à virgule ( qui sont nécessaire pour l'emplacement du bouton).

    C'est pour cela, que j'ai pensé à PointF. Mais j'ai testé cela avec l'aide que vous m'avez fourni. Mais le problème c'est que les coordonnées sont finalement arrondi.
    Ce qui va provoquer un petit décalage.

    Donc je sais pas s'il y a une autre possibilité pour fixer l'emplacement du bouton à la virgule près ??

    Est-ce qu'il y aurait pas une méthode qui indiquerait l'emplacement en pixel du bouton ?
    Peut-être que cela marcherai mieux non ?

    enfin si vous avez des suggestions ou des solutions elles sont les bienvenu
    En espérant que j'ai été assez claire dans mes explications

  5. #5
    Membre actif
    Avatar de fmdao
    Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 90
    Points : 210
    Points
    210
    Par défaut
    Pourquoi ne fais tu pas tes calculs avec des entiers ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Travaillé avec que des entiers ca ne va pas. J'ai besoin de variables à virgules.

    Parce que si je fait qu'avec des entiers soit l'aspect du panel avec les composants cela va pas me plaire ( il ne seront pas position correctement).
    Soit il y aura des petits décalages à chaque changement de taille du panel.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par FabioMelody29 Voir le message
    Est-ce qu'il y aurait pas une méthode qui indiquerait l'emplacement en pixel du bouton ?
    Bah c'est ce que fait la propriété Location... C'est un Point avec des coordonnées entières, qui représente la position au pixel près. Les pixels sont indivisibles, donc ça n'a pas de sens d'utiliser des coordonnées avec une partie décimale(*)...

    (*) c'est pourtant ce qui est fait en en WPF, mais c'est une autre histoire...

  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 : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par FabioMelody29 Voir le message
    Travaillé avec que des entiers ca ne va pas. J'ai besoin de variables à virgules.

    Parce que si je fait qu'avec des entiers soit l'aspect du panel avec les composants cela va pas me plaire ( il ne seront pas position correctement).


    A moins que la technologie des écrans ait fait un bon dont je n'ai pas été informé, je ne crois pas qu'il existe des fractions de pixels.

    EDIT : Grilled by Tomlev !

  9. #9
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Est-ce une contrainte d'énoncé de calculer automatiquement l'emplacement du/des bouton(s)?
    Si non, utilise un FlowLayoutPanel ou un TableLayoutPanel, ce sont des composants qui peuvent t'aider à réaliser ce dont tu as besoin sans te prendre la tête outre mesure.

    Si oui, de toute façon en WinForms (GDI) ton unité de mesure est le pixel, techniquement tu ne peux pas afficher un button à 1/2 pixel près. Il faut revoir tes calculs avec les différents arrondis qu'a posté Tomlev.

    Bon dév...

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    j'ai essaye de mettre un FlowLayoutPanel. Mais le problème c'est que l'utilisateur doit pouvoir déplacer le bouton ou il le désir dans le panel.

    Et à ce que j'ai pu voir on ne peut pas faire cela avec le FlowLayoutPanel.

    J'ai testé aussi avec les arrondis qu'a posté Tomlev. Mais je ne suis pas satisfait les éléments ne sont pas bien mis en place en fonction de la taille du panel.

    il doit bien avoir une solution pour placer correctement des éléments dans un panel ou autre sans avoir des décalage si on change la taille du panel non ?

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par FabioMelody29 Voir le message
    il doit bien avoir une solution pour placer correctement des éléments dans un panel ou autre sans avoir des décalage si on change la taille du panel non ?
    Oui, et y a pas besoin de faire des calculs savants pour ça... on utilise les propriétés Dock et Anchor

Discussions similaires

  1. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49
  2. TChart : déplacer un point
    Par Nicolas dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/11/2002, 18h05
  3. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51
  4. Réponses: 3
    Dernier message: 12/06/2002, 19h03
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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