Tracer une ligne sans utiliser OnPaint

Résolu
GranPicS Messages postés 41 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 30 juin 2011 - 6 janv. 2011 à 18:00
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre 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.

7 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
8 janv. 2011 à 11:01
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!
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
7 janv. 2011 à 09:19
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
0
GranPicS Messages postés 41 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 30 juin 2011
7 janv. 2011 à 14:04
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...
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
7 janv. 2011 à 14:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
GranPicS Messages postés 41 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 30 juin 2011
11 janv. 2011 à 19:06
Super! Ta méthode marche très bien et correspond tout à fait à ce que je cherchais!
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
12 janv. 2011 à 09:25
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
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
12 janv. 2011 à 12:03
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é. -
0
Rejoignez-nous