none
Bouger la légende d'un MSchart RRS feed

  • Question

  • Bonjour

    J'ai des graph réalisés avec MSchart qui montrent des séries de point de type Line avec à droite du graph une légende.
    Je souhaite que l'utilisateur puisse déplacer la légende (sans changer son format) pour la placer par dessus le graph, là où ça ne cache pas les séries ; le but final est de pouvoir exporter des bitmap du graph moins larges pour pouvoir les insérer de manière plus lisible dans un doc word par exemple.

    Par quel moyen peut on faire ce genre de chose ?

    J'ai trouvé à positionner où je veux la légende en utilisant

    chart1.Legends[0].Position.Auto = false ;
                   chart1.Legends[0].Position.X = 10;
                   chart1.Legends[0].Position.Y = 10;
                   chart1.Legends[0].Position.Width = 35;
                   chart1.Legends[0].Position.Height = 10;
    mais je ne vois pas du tout comment rendre la légende déplaçable à la souris, ou quelquechose qui y ressemblerait.

    Je code en C# sur visual studio express 2013 sur un projet winform

    Merci par avance

    mercredi 5 mars 2014 19:58

Réponses

  •  Bonjour

    Je vous propose de traiter des évènements de clavier = KeyDown.

    Pour deplacer la legend on utilize ALT + KeyUp, KeyDown, KeyLeft, KeyRight.

    Sur la forme vous mettez KeyPreview  = true ;

    Et le traitement pour KeyDown :

     private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
    
                if (e.Alt && e.KeyCode == Keys.Down)
                {
                    legendAppearance1.Chart1.Legends[0].Position.Y += 10;
                    e.Handled = true; 
                }
                else if (e.Alt && e.KeyCode == Keys.Up)
                {
                    legendAppearance1.Chart1.Legends[0].Position.Y -= 10;
                    e.Handled = true; 
                }
                else if (e.Alt && e.KeyCode == Keys.Left)
                {
                    legendAppearance1.Chart1.Legends[0].Position.X -= 10;
                    e.Handled = true; 
                }
                else if (e.Alt && e.KeyCode == Keys.Right)
                {
                    legendAppearance1.Chart1.Legends[0].Position.X += 10;
                    e.Handled = true; 
                }

    Vous devez vous assurer de ne pas dépasser les limites de votre chart.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse DavidIDE lundi 10 mars 2014 13:35
    jeudi 6 mars 2014 13:30

Toutes les réponses

  •  Bonjour

    Je vous propose de traiter des évènements de clavier = KeyDown.

    Pour deplacer la legend on utilize ALT + KeyUp, KeyDown, KeyLeft, KeyRight.

    Sur la forme vous mettez KeyPreview  = true ;

    Et le traitement pour KeyDown :

     private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
    
                if (e.Alt && e.KeyCode == Keys.Down)
                {
                    legendAppearance1.Chart1.Legends[0].Position.Y += 10;
                    e.Handled = true; 
                }
                else if (e.Alt && e.KeyCode == Keys.Up)
                {
                    legendAppearance1.Chart1.Legends[0].Position.Y -= 10;
                    e.Handled = true; 
                }
                else if (e.Alt && e.KeyCode == Keys.Left)
                {
                    legendAppearance1.Chart1.Legends[0].Position.X -= 10;
                    e.Handled = true; 
                }
                else if (e.Alt && e.KeyCode == Keys.Right)
                {
                    legendAppearance1.Chart1.Legends[0].Position.X += 10;
                    e.Handled = true; 
                }

    Vous devez vous assurer de ne pas dépasser les limites de votre chart.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse DavidIDE lundi 10 mars 2014 13:35
    jeudi 6 mars 2014 13:30
  • Bonjour

    Un petit retour SVP?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 mars 2014 09:26
  • Bonjour

    Désolé pour le temps de réponse, j'ai mis du temps à m'en sortir et je me perds (je ne sais jamais où je suis) sur les forums du social.msdn...

    Fort de cette proposition, j'ai réussi à mettre en place un positionnement de la légende avec la souris.

    J'active un mode "accroché à la souris", la légende suit la souris avec un bornage à l'intérieur du chart tant que je garde la souris enfoncée et des que je lâche le  bouton de la souris la légende reste figée.

    private void chart1_MouseMove(object sender, MouseEventArgs e)
            {
                if (MouvementLegendeActif == true)
                {
                    float posX = e.X * 100 / chartMonotone.Width;
                    float posY = e.Y * 100 / chartMonotone.Height;
    
                    if (posX > (99 - chart1.Legends["Legend1"].Position.Width)) posX = (99 - chart1.Legends["Legend1"].Position.Width);
                    if (posX < 1) posX = 1;
                    if (posY > 90) posY = 90;
                    if (posY < 1) posY = 1;
                    chart1.Legends["Legend1"].Position.X = posX;
                    chart1.Legends["Legend1"].Position.Y = posY;
                }
            }

    C'est juste le merdier à faire à cause d'une propriété en % là ou une autre est en pixel mais ca marche nickel

    Merci

    lundi 10 mars 2014 13:34