NICKO02
Messages postés6Date d'inscriptionjeudi 5 décembre 2002StatutMembreDernière intervention27 mars 2003
-
27 mars 2003 à 08:49
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024
-
5 juin 2013 à 14:37
Voila, j'ai commencé il y a peu a creer des graphiques à l'aide du GDI+ de .net.
J'utilise principalement les methodes DrawString() et DrawLine().
C'est apropos de cette derniere : quant les lignes sont horizontales ou verticales, il n'a aucun probleme mais pour une ligne ambiée : l'ordi met 2 secondes a me l'afficher.
Si qqn connait la cause de ce probleme et, eventuellement la solution
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 27 mars 2003 à 10:09
Pourrais-tu montrer une partie de ton code, j'ai déja utilisé les DrawLine() avec des lignes ni horizontales ni verticales et je n'ai pas eu de problèmes.
Amicalement SharpMao
NICKO02
Messages postés6Date d'inscriptionjeudi 5 décembre 2002StatutMembreDernière intervention27 mars 2003 27 mars 2003 à 12:36
Voici la classe en entier : tu devra la lancer avec une ligne :
graphique grf = new graphique("chaine", 2.0, 2.0); à partir du programme principal.
Il sagit d'y tracer une droite qui serait là de y=2x+2
Il n'y pas trops de commentaires mais tu t'y retrouvera :
Le probleme se situe dans dessin_graph()
Voila 205 lignes :
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
class graphique : System.Windows.Forms.Form
{
private string chaine; // equation de type Ax+b pour affichage
private double ax; //valeur de x
private double b; //valeur de b
//coordonnée de la plache graphique
Graphics g;
private int x = 6;
private int y = 20;
private int rectgd = 460;//de gauche a droite
private int recthb = 400;//de haut en bas
private int gradu = 5;
private int ipas = 10;
public graphique(string equation, double ax, double b)
{
chaine = equation;
this.ax = ax;
this.b = b;
this.Size = new Size(500, 500);
source = new TextBox();
lblsrc = new Label();
graduate = new Label();
grnum = new TextBox();
pas = new TextBox();
ok = new Button();
g = this.CreateGraphics();
controles();
}
private void controles()
{
source.Location = new Point(15, 35);
source.Size = new Size(200, 20);
lblsrc.Location = new Point(15, 15);
lblsrc.Size = new Size(200, 20);
lblsrc.Text = "Equation en cours :";
graduate.Location = new Point(230, 15);
graduate.Size = new Size(200, 20);
graduate.Text = "Nombre de graduations/taille";
grnum.Location = new Point(430, 15);
grnum.Size = new Size(40, 20);
grnum.Text = Convert.ToString(gradu);
pas.Location = new Point(472, 15);
pas.Size = new Size(40, 20);
pas.Text = Convert.ToString(ipas);
ok.Location = new Point(430, 35);
ok.Size = new Size(82, 20);
ok.Text = "OK";
ok.Click += new System.EventHandler(this.ok_onclick);
cs_Scooper
Messages postés71Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention12 septembre 2013 4 juin 2013 à 23:43
il me semble (si je ne dis pas de bétises) que dans le onpaint il faut appeller d'abord base.onpaint(e)
puis dessiner mais en passant à la fonction l'objet e.graphics
cela éviter de recréer un objet à chaque appel de fonction
de plus les objets Pen, Brush ... doivent être supprimés explicitement à la fin (Dispose()) ou bien les utiliser comme suit :
using(Pen p = new Pen ...)
{
//dessins ici
}
comme cela ils sont automatiquement détruits