seblutfr
Messages postés16Date d'inscriptionmercredi 23 octobre 2002StatutMembreDernière intervention30 novembre 2005
-
29 nov. 2005 à 15:57
seblutfr
Messages postés16Date d'inscriptionmercredi 23 octobre 2002StatutMembreDernière intervention30 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.
seblutfr
Messages postés16Date d'inscriptionmercredi 23 octobre 2002StatutMembreDernière intervention30 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)
olixelle
Messages postés506Date d'inscriptionvendredi 30 juillet 2004StatutMembreDernière intervention 3 mars 20082 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 ?
seblutfr
Messages postés16Date d'inscriptionmercredi 23 octobre 2002StatutMembreDernière intervention30 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
seblutfr
Messages postés16Date d'inscriptionmercredi 23 octobre 2002StatutMembreDernière intervention30 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 :-\
olixelle
Messages postés506Date d'inscriptionvendredi 30 juillet 2004StatutMembreDernière intervention 3 mars 20082 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
seblutfr
Messages postés16Date d'inscriptionmercredi 23 octobre 2002StatutMembreDernière intervention30 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 ? :-\