Tracer une ligne sans utiliser OnPaint [Résolu]

Messages postés
41
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
30 juin 2011
- - Dernière réponse : krimog
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
- 12 janv. 2011 à 12:03
Salut à tous, j'aimerai savoir s'il existe une méthode permettant de dessiner une ligne entre 2 points sans utiliser OnPaint.

En effet, OnPaint ne semble pas pouvoir être appelé dans le code et se contente de s'exécuter au lancement du programme; de plus il semble impossible de lui passer des paramètres.

J'utilisais cette méthode pour la ptite histoire:

protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;

g.DrawLine(Pens.Red, 0, 300, 100, 200); //exemple de coordonnées

}
Donc si quelqu'un connait une fonction qui permet de tracer des lignes entre 2 points cela me rendrait un grand service!

Merci d'avance.
Afficher la suite 
A voir également:

Votre réponse

7 réponses

Meilleure réponse
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
20
3
Merci
Bonjour

Il n'y a pas beaucoup d'autres solutions, car si tu ne traces pas tes lignes dans le OnPaint, elles vont disparaitres lors des rafraichissements de la fenetre.
tu peux te créer un UserControl qui embarquera sa propre methode OnPaint, mais c'est un peu lourd pour des lignes.
Le plus simple est d'avoir un objet ligne, ou une liste d'objets ligne que tu remplis à volonté et qui est pris en charge dans le OnPaint.

petit ex:
//Collection de lignes
List Lines = new List();
//Ajoute une ligne
private void DrawLine(Point start, Point end)
{ 
    Lines.Add(new Point[]{start,end});
    Invalidate();
}
//Simulation de remplissage
int LineEnd = 100;
private void button1_Click(object sender, EventArgs e)
{
    DrawLine(new Point(0, 300), new Point(LineEnd++, 200));
}
//On Paint
protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    //trace les lignes
    foreach(Point[] line in Lines)
        e.Graphics.DrawLine(Pens.Red, line[0],line[1]); 
}


Bon code
Bob.

C# is amazing, enjoy it!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
14511
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 mai 2019
88
0
Merci
Hello,
Pourquoi ne pas continuer à l'utiliser? Au lieu de lui passer des paramètres directement, tu peux utiliser des membres de ta classe

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Commenter la réponse de BunoCS
Messages postés
41
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
Ba en fait je cherche une fonction pour dessiner qui puisse être appelé par d'autres fonctions, ce qui ne semble pas possible avec OnPaint...
Commenter la réponse de GranPicS
Messages postés
14511
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 mai 2019
88
0
Merci
Eh bien le code que tu as mis dans OnPaint, tu le mets dans une méthode dédiée...que tu pourras appeler dans le OnPaint ou ailleurs..

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Commenter la réponse de BunoCS
Messages postés
41
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
30 juin 2011
0
Merci
Super! Ta méthode marche très bien et correspond tout à fait à ce que je cherchais!
Commenter la réponse de GranPicS
Messages postés
14511
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 mai 2019
88
0
Merci
C'est ce que je disais...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Commenter la réponse de BunoCS
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
22
0
Merci
Salut

Il existe une autre solution qui évite d'avoir à utiliser OnPaint.
Tu peux passer par une image temporaire et dessiner dessus, puis l'afficher dans ta PictureBox.

Image img = new Bitmap(640, 480);
Graphics g = Graphics.FromImage(img);
g.DrawLine(...);
maPictureBox.Image = img;


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog