Mon premier code de GDI+ : 3 lignes toutes bêtes qui ne marchent pas
chandler8692
Messages postés49Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 9 février 2007
-
8 mai 2005 à 17:31
chandler8692
Messages postés49Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 9 février 2007
-
11 mai 2005 à 21:07
Salut, je m'initie au GDI+ et j'essaie des petits codes tous bêtes mais
je n'arrive pas à faire marcher celui là. Pas de bug à la compilation
mais rien ne s'affiche dans ma fenêtre Mainform, elle reste blanche.
Qu'ai-je oublié ?
public class MainForm : System.Windows.Forms.Form
{
public MainForm()
{
InitializeComponent();
Rectangle rect = new Rectangle(30,70,100,60);
SolidBrush sb = new SolidBrush(Color.Red);
Graphics g = this.CreateGraphics();
g.FillRectangle(sb,rect);
sb.Dispose();
g.Dispose();
this.Show();
}
[STAThread]
public static void Main(string[] args)
{
Application.Run(new MainForm());
}
A voir également:
Mon premier code de GDI+ : 3 lignes toutes bêtes qui ne marchent pas
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 8 mai 2005 à 17:46
Salut,
Les dessins effectués ne sont pas persistant, c'est à dire que tu es en charge de leur affichage a chaque rafraichissement de la zone sur laquelle ils sont.
De plus dans le constructeur le Form n'est aps encore affiché, donc en gros tu dessines dans le vide là.
chandler8692
Messages postés49Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 9 février 2007 8 mai 2005 à 18:23
Ne sachant pas ce que overrider la méthode OnPaint signifie
(d'ailleurs, qu'est-ce que ça signifie ?), j'ai juste placé this.show
avant de créer mes graphiques comme l'a suggéré coq et ça a marché.
Donc merci, mais malgré tout, qu'est-ce que la méthode OnPaint ?
chandler8692
Messages postés49Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 9 février 2007 10 mai 2005 à 18:23
L'argument e que prend OnPaint en entrée, quel est-il, quand j'appelle
OnPaint, est-ce que je doit envoyé un argument en entrée à la fonction ?
OnPaint(argument); ? Si oui, alors quel est cet argument ? Suis-je clair ? hum
J'ai fait un petit programme qui marche bien sauf que le dessin n'est
pas persistant. La fonction qui fait le dessin s'appellait void
graph(). Je l'ai renomée en
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 10 mai 2005 à 18:26
Un dessin n'est jamais persistant.
Et ce n'est aps à toi d'appeler OnPaint, elle l'est auomatiquement à chaque fois que la zone cliente doit etre redessinée.
Si tu veux forcer le rafraichissement tu as la methode Refresh par exemple.
chandler8692
Messages postés49Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 9 février 2007 10 mai 2005 à 18:49
D'accord, pour l'utilisation de refresh, si je veux raffraichir dès que
l'on a changé la taille de la fenêtre, comment imposer cette condition
au raffraichissement ?
// Ensure the Form remains square (Height = Width).
if(control.Size.Height != control.Size.Width)
{
control.Size = new Size(control.Size.Width, control.Size.Width);
}
}
la compilation se passe bien mais aucun évènement n'est détecté, ni
quand la fenètre est réduite (exemple 1) ni quand sa taille n'est plus
carrée (exemple 2). Qu'est-je oublié ?
Je n'ai fait qu'un copier/coller de ces bouts de code dans mon
programme d'origine. Je n'ai rien défini de plus dans
InitializeComponent par exemple (ni nul part ailleurs).
chandler8692
Messages postés49Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 9 février 2007 10 mai 2005 à 23:48
Ah, voilà ! Je pensais bien devoir rajouter quelque chose dans InitializeComponent().
Merci.
Ceci me permet de poser une nouvelle question (j'en ai visiblement beaucoup mais du coup j'apprend vite) :
Quelle commande permet de ne pas afficher les lignes et les rectangles
etc. au fur et à mesure qu'ils sont dessinés mais seulement une fois
qu'ils le sont tous ? J'ai lu son existence y'a quelques jours mais je
ne pensais pas en avoir besoin et je n'arrive pas à remettre la main
dessus.
chandler8692
Messages postés49Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 9 février 2007 11 mai 2005 à 00:21
D'accord, je sais pas si ça vaut le coup mais je vais regarder un peu ce que c'est.
Au fait merci pour toutes tes explications. Grace à toi, mon programme prend de la forme.
J'en suis à plus d'une centaine de lignes et ça marche comme je veux.
Je trouve le c# et probablement la programmation en général très
ennivrant. J'ai arreté y'a quasiment 1 an parceque je n'ai plus eu le
temps mais là, je reprend à la vitesse grand V.