Problème avec draw

Résolu
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006 - 26 janv. 2006 à 10:29
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006 - 16 févr. 2006 à 10:52
Bonjour à tous,
j'ai encore une fois un petit problème. Je m'explique, j'utilise le DrawEllipse() lorsque je clique sur un boutton.
Donc il m'affiche correctement mon cercle à l'endroit que je souhaite, le problème est que lorque par exemple je redimensionne ma fenetre lors de l'utilisation de mon appli, le cercle d'efface or ce que je voudrais c'est qu'il ne s'efface pas comme avec l'uitlisation de l'événement OnPaint.

Comment je pourrai faire ?
Merci d'avance !



Kbitnik

16 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 janv. 2006 à 15:03
Oui normal puisque les dessins ne sont pas persistants.

public partial class Form1 : Form
{
private bool draw = false;


public Form1( )
{
InitializeComponent( );


Button b = new Button( );
b.Text = "Draw";
b.Location = new Point( 0, 0 ); b.Click +delegate( object sd, EventArgs e ) { draw !draw; Invalidate( ); };


this.Controls.Add( b );
}


protected override void OnResize( EventArgs e )
{
// base.OnResize( e );


Invalidate( ); // Paint !!
}


protected override void OnPaint( PaintEventArgs e )
{
// base.OnPaint(e);


if ( draw )
e.Graphics.FillEllipse( Brushes.Purple, this.ClientRectangle );
}
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 janv. 2006 à 13:12
Salut, les dessins avec GDI+ ne sont pas persistants, tu peux rajouter un appel à la méthode Invalidate dans l'évènement Resize de ta forme ou dans la méthode protegée OnResize ou bien utiliser la méthode SetStyles avec le flag ControlStyles.ResizeRedraw. Mais dans tous les cas les dessins se font dans l'évènement Paint ou alors tu crées un Graphics avec CreateGraphics.

using ( Graphics g = this.CreateGraphics( ) )
{
// ..
}
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
26 janv. 2006 à 13:39
Bin justement, c'est ce que je fais, je crée un graphics,comme ceci :
Graphics g = this.createGraphics();
g.drawEllipse(....);
g.Dispose();

Mais bien que je fasse ça, dès que je redimensionne le dessin s'efface


Kbitnik
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
27 janv. 2006 à 16:01
Aahh , c'est exactement ce qu'il me fallait, je te remercie lutinore !



Kbitnik
0

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

Posez votre question
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
27 janv. 2006 à 17:12
Par contre, j'ai juste une dernire petite question à ce sujet, lorsque je réduis mon formulaire, donc le rond se réduit en même (chose que je voulais faire), seulement que lorsque je réduis la fenetre, l'image clignote beaucoup, est-ce normal ? et y a t'il un moyen de remédier à ce problème ?

Merci d'avance !



Kbitnik
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 janv. 2006 à 19:37
Oui faut utiliser le double-buffering, rajoutes ça dans le constructeur de ta forme:

this.SetStyle
(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.DoubleBuffer,
true
);
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
27 janv. 2006 à 21:24
Ahh ça y est, ça marche mieux à présent, je te remercie beaucoup Lutinore !



Kbitnik
0
cs_yo99 Messages postés 4 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 10:01
salut,
j'ai le meme probleme que kbitnik en fait mais g pas du tout compris ski est expliqué avec cette classe "partiel" !
en fait j'utilise un model MVC et je voudrai creer des formes graphic sur le click d'un boutton.
le probleme c que mon affichage s'eeface des que je deplace la fentre en dehors de l'ecran :(
c possible de m'aider ??
Merci
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
16 févr. 2006 à 10:12
Salut, si tu ne veux pas que les éléments graphiques de ta form ne soient pas persistants, je pense que tu as juste a le mettre dans l'événement OnPaint. Moi là, je met mes graph dans le Onpaint lorsque je déplace ou même resize ma form, rien ne s'efface.


Kbitnik
0
cs_yo99 Messages postés 4 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 10:28
le truc c que c ca que je comprend pas bien en fait c koi exactement que je dois mettre dans cet evenement onPaint ?
en fait g une fonction qui me crée mes graphique et que j'appele dans une boucle donc je voit pas trop c quoi que je ddois mettre dans cet evenement

Yohan
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
16 févr. 2006 à 10:30
Pour dessiner sur ta form ou un bouton je suppose que tu utilises des instructions comme par exemple :
Graphics g = this.createGraphics();
g.DrawRectangle(....);

C'est bien ça ?

Kbitnik
0
cs_yo99 Messages postés 4 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 10:37
ouai c'est exactement ca

Yohan
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
16 févr. 2006 à 10:42
Et bien c instructions en faite tu les mets dans l'événement Form_OnPaint()
Donc en faite si tu travailles avec Visual Studio.net 2003 comme moi, tu clique sur ta form tu vas dans les propriétés, il y a un éclair jaune (c'est les évenements), tu cliques dessus, tu regardes après OnPaint et tu double-cliques dessus il va t'ouvrir une méthode Form_OnPaint() dans ton code de ta form, et puis tu mets tes instructions graphiques dans cette méthodes en faisant comme ceci au début :
Graphics g = e.graphics;
et puis là, tu mets tes instructions :
g.drawrectangle....

Dis moi si ça marche !!



Kbitnik
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
16 févr. 2006 à 10:45
Attends je suis peut etre en train de dire une bétise, si c'est le onpaint de ta form je parle, après si tu veux tu peu aussi faire le onpaint de ton boutton, je pense que c'est plus cela que tu veux toi, donc toi en faite tu sélectionnes ton bouton, propriétés, double cliques sur OnPaint et là il te générera l'événement Button1_OnPaint() et non Form_OnPaint()


Kbitnik
0
cs_yo99 Messages postés 4 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 16 février 2006
16 févr. 2006 à 10:51
merci beaucoup Kbitnik ca marche nickel :) !!
je me prenais la tete pour rien en fait j'avais pas trop compris le principe et en fait c pas compliqué !!
merci pour ton aide

Yohan
0
Kbitnik Messages postés 125 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 2 mars 2006
16 févr. 2006 à 10:52
Ya pas de soucis ! a la prochaine



Kbitnik
0