[.NET] Dessin si plusieurs forms

Résolu
seblutfr Messages postés 16 Date d'inscription mercredi 23 octobre 2002 Statut Membre Dernière intervention 30 novembre 2005 - 29 nov. 2005 à 15:57
seblutfr Messages postés 16 Date d'inscription mercredi 23 octobre 2002 Statut Membre Dernière intervention 30 novembre 2005 - 30 nov. 2005 à 21:51
Bonjour,

J'ai cette fois un problème avec les nouvelles méthodes de dessin (je viens du monde VB6).

Je souhaite dessiner des lignes sur un PictureBox.
J'ai donc mis :
Dim g as Graphics
g = PictureBox1.CreateGraphics
Là, pas de souci, g.DrawLine (Pens.Aqua 10, 10, 20, 20) me fait exactement ce que je veux.

Le problème, c'est que je dois aussi dessiner sur une PictureBox qui n'est pas sur le form "qui dessine".
J'ai donc modifié :
Public g as Graphics
g = frmMain.PictureBox1.CreateGraphics
(ces deux lignes sont dans un module)

Et là, plus rien ne s'affiche sur ma form frmMain, dans le PictureBox.

Je ne comprends pas où peut être l'erreur.
Si quelqu'un peut m'aider.

Merci,

Séb

8 réponses

seblutfr Messages postés 16 Date d'inscription mercredi 23 octobre 2002 Statut Membre Dernière intervention 30 novembre 2005
30 nov. 2005 à 21:51
J'ai posé la question sur les groupes de discussion, j'ai eu quelques éléments de réponse, que je retransmets ici.
En fait, une solution consiste bien à dessiner un bitmap et à afficher ce bitmap sur le PictureBox. Ca ne me dit pas pourquoi la solution simple ne fonctionne pas, mais ça m'aura dépanné quand j'aurai réglé les histoires de rafraichissement.

Public mGraphicsBMP As Bitmap
Protected mGraphicsMem As Graphics
mGraphicsBMP = New Bitmap(mPicDest.ClientRectangle.Width,
mPicDest.ClientRectangle.Height)
mGraphicsMem = Graphics.FromImage(mGraphicsBMP)
lBrush = New SolidBrush(pColor)
mGraphicsMem.FillRectangle(lBrush, pRect)

et dans l'événement Paint du PictureBox
e.Graphics.DrawImage(mGraphicsBMP, 0, 0)

Séb
3
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 nov. 2005 à 17:06
1. frmMain ne serait pas le nom de ta classe par hasard ?
2. Crees tu ton second formulaire dans le premier ou crees tu les 2 formulaires dans un module ?

Rollerman
0
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 nov. 2005 à 17:07
je crois que j'avais mal lu ton post, ne serait ce pas un pb de refresh ?

Rollerman
0
seblutfr Messages postés 16 Date d'inscription mercredi 23 octobre 2002 Statut Membre Dernière intervention 30 novembre 2005
29 nov. 2005 à 17:55
Non non, en fait, il s'agit d'une appli Mdi : la form où s'affiche le dessin et la feuille parent, et celle d'où part la commande de dessin est une fille. Les deux sont instanciées, pas de souci là dessus. Si je place une PictureBox sur la feuille fille, aucun souci. Je ne pense pas qu'il s'agisse de refresh, les deux feuilles étant à l'écran en même temps. Si ? Y a-t-il quelque chose à faire pour que le dessin se "mette à jour" sur la feuille parent ?
J'avoue ne pas trop savoir que tenter, là.

Séb
0

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

Posez votre question
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
30 nov. 2005 à 10:13
ben tu peux tenter un monformulaire.refresh, ca oblige le form a se redessiner ainsi que topus ces composants

Rollerman
0
seblutfr Messages postés 16 Date d'inscription mercredi 23 octobre 2002 Statut Membre Dernière intervention 30 novembre 2005
30 nov. 2005 à 11:35
Bonjour,

Merci pour le temps accordé., mais ça ne marche pas mieux.
Au contraire, d'après ce que j'ai lu dans différentes doc, la propriété AutoRedraw qui existait en VB6 n'apparait plus en .net, et du coup, lorsqu'un formulaire est redessiné, on perd ce qsui a été dessiné "manuellement".
Il est donc possilbe, à mon avis, que la form principale se refraichisse, et que du coup, je ne vois pas mon dessin avant qu'il ne disparaisse.
Il ya bien une péthode pour simuler l'Autoredraw à partir d'un bitmap, mais j'ai pas tout compris :-\

Séb
0
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
30 nov. 2005 à 12:05
ce que tu peux faire sinon, c'est surcharger la méthode "onpaint" de l'objet form, tu mets ton code dans cette fonction comme ca il sera executer automatiquemetn des que le formulaire se dessine

Rollerman
0
seblutfr Messages postés 16 Date d'inscription mercredi 23 octobre 2002 Statut Membre Dernière intervention 30 novembre 2005
30 nov. 2005 à 12:34
Là, je vois pas trop comment procéder.

Je m'explique : ma feuille mère comprend une zone où s'affiche le dessin.
La feuille fille comprend une interface pour dessiner des lignes (zones de saisie des coordonnées X, Y)
Un bouton sur la feuille fille permet alors d'ajouter la ligne dans un tableau en mémoire, et de redessiner l'ensemble du contenu tableau dans la zone sur la feuille mère. D'autres feuilles filles sont suceptibles de dessiner sur cette PictureBox.

Et là, mes maigres connaissances en .net ne me permettent pas de continuer.

Pourquoi avoir supprimé la propriété AutoRedraw ? :-\
0
Rejoignez-nous