Problème avec draw

Résolu
Signaler
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006
-
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006
-
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

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
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 );
}
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
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( ) )
{
// ..
}
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

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
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

Aahh , c'est exactement ce qu'il me fallait, je te remercie lutinore !



Kbitnik
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

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
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Oui faut utiliser le double-buffering, rajoutes ça dans le constructeur de ta forme:

this.SetStyle
(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.DoubleBuffer,
true
);
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

Ahh ça y est, ça marche mieux à présent, je te remercie beaucoup Lutinore !



Kbitnik
Messages postés
4
Date d'inscription
samedi 27 septembre 2003
Statut
Membre
Dernière intervention
16 février 2006

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
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

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
Messages postés
4
Date d'inscription
samedi 27 septembre 2003
Statut
Membre
Dernière intervention
16 février 2006

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
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

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
Messages postés
4
Date d'inscription
samedi 27 septembre 2003
Statut
Membre
Dernière intervention
16 février 2006

ouai c'est exactement ca

Yohan
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

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
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

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
Messages postés
4
Date d'inscription
samedi 27 septembre 2003
Statut
Membre
Dernière intervention
16 février 2006

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
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

Ya pas de soucis ! a la prochaine



Kbitnik