Equivalent de Me.Autoredraw en Vb.net 2005 [Résolu]

The Meteorologist 241 Messages postés jeudi 18 janvier 2007Date d'inscription 3 novembre 2011 Dernière intervention - 4 févr. 2008 à 17:10 - Dernière réponse : cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention
- 18 nov. 2014 à 13:07
Bonjour tout le monde;
Je recherche simplement en moyen de reconstituer le graphics d'un formulaire une fois celui-ci redimensionné.
En fait l'équivalent de la propriété AutoRedraw (si mes souvenirs sont bons) en Vb6.

Merci beaucoup pour votre aide :),
Simon
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Kevin.Ory 843 Messages postés mercredi 22 octobre 2003Date d'inscription 7 janvier 2009 Dernière intervention - 4 févr. 2008 à 19:09
3
Merci
Salut,

Au plus simple, on dessine le tout dans l'événement Paint du contrôle.

  Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    e.Graphics.DrawString("Salut", Me.Font, Brushes.Blue, 100, 100)
End Sub

Mais si la routine de dessin est complexe et qu'elle te prend trop de temp, ou que tu veux tout simplement des performances d'affichage optimale, il faut effectivement faire ça autrement. Le "plus mieux" dans ce cas, c'est d'utiliser un BufferedGraphics:

Public Class Form1

    Private buffer As BufferedGraphics

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Créer le buffer
        Dim Context As BufferedGraphicsContext = BufferedGraphicsManager.Current
        Context.MaximumBuffer = Me.ClientSize
        buffer = Context.Allocate(Me.CreateGraphics, Me.ClientRectangle)

        ' Dessiner dans le buffer
        buffer.Graphics.Clear(Color.BlanchedAlmond)
        buffer.Graphics.DrawString("Salut", Me.Font, Brushes.Blue, 100, 100)
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        ' "Rendre" le contenu du buffer pour dessiner sur la form
        buffer.Render(e.Graphics)
    End Sub
End Class

Sinon, tu peux aussi créer une image et l'appliquer comme image de fond à ta form. Moins performant (je pense) mais utile pour une gestion correct de tes contrôle ayant BackColor = Color.Transparent

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim MyImage As New Bitmap(Me.ClientRectangle.Width, Me.ClientRectangle.Height)
        Dim g As Graphics = Graphics.FromImage(MyImage)
        g.Clear(Color.BlanchedAlmond)
        g.DrawString("Salut", Me.Font, Brushes.Blue, 100, 100)
        Me.BackgroundImage = MyImage
    End Sub

Voilà

Merci Kevin.Ory 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Kevin.Ory
The Meteorologist 241 Messages postés jeudi 18 janvier 2007Date d'inscription 3 novembre 2011 Dernière intervention - 4 févr. 2008 à 19:19
0
Merci
Merci infiniment pour cette reponse monstrueusement bien construite [auteur/KEVINORY/183467.aspx Kevin.Ory]
:).

a+
Simon
Commenter la réponse de The Meteorologist
tcari 8 Messages postés mardi 17 juin 2003Date d'inscription 9 février 2008 Dernière intervention - 9 févr. 2008 à 20:33
0
Merci
C'est super !!!!

Merci beaucoup pour cette aide !

Grâce à toi, voici ce que j'ai pu faire : le principe était de conserver mon image dans ma picturebox.
C'est très simpliste, mais le but est de l'améliorer..

Il suffit de créer une windows form, d'y ajouter un controle PictureBox (PictureBox1) et de remplacer tout le code !
Public

Class ZoneDessin

Private buffer
As BufferedGraphics

Private
Sub ZoneDessin_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles MyBase.Load
   dessine()

End
Sub

Private
Sub dessine()
   ' C'est la fonction (ou une des fonctions) qui permet de dessiner. On dessine directement dans le buffer, et
   ' on définit ce buffer comme ayant la taille du contrôle PictureBOX

   ' définition du rectangle correspondant à la moitié de ma picturebox
   Dim m_rectangle
As
New Rectangle(0, 0,
CInt(PictureBox1.Width / 2), PictureBox1.Height)

   '      Création du buffer
   Dim Context
As BufferedGraphicsContext = BufferedGraphicsManager.Current
   Context.MaximumBuffer = PictureBox1.ClientSize
   buffer = Context.Allocate(PictureBox1.CreateGraphics, PictureBox1.ClientRectangle)

   ' Dessiner dans le buffer
   buffer.Graphics.Clear(Color.Green)
   buffer.Graphics.DrawRectangle(Pens.Black, m_rectangle)
   buffer.Graphics.FillRectangle(
New SolidBrush(Color.Blue), m_rectangle)
   buffer.Graphics.DrawString(
"image conservée",
Me.Font, Brushes.Black, 0, 0)

End
Sub

Private
Sub redessine()
   ' Ici, on redessine sur la picturebox, l'image qui était en mémoire
   Application.DoEvents()
   ' NB : LE DOEVENTS EST OBLIGATOIRE CHEZ MOI !!!
   buffer.Render(PictureBox1.CreateGraphics)

End
Sub

Private
Sub ZoneDessin_Paint(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.PaintEventArgs)
Handles
Me.Paint
   ' On appelle la fonction qui vient rechercher le dessin qui est en mémoire
   redessine()

End
SubEnd

ClassMERCI encore pour ton aide

toto
MERCI BEAUCOUP DE VOTRE AIDE
MOI J AI UTILISER
bmp = New Bitmap(Me.Piccanvas.Width, Me.Piccanvas.Height)
Using g As Graphics = Graphics.FromImage(bmp)
Dim pt As PointF = Me.Piccanvas.PointToScreen(New Point(0, 0))
g.CopyFromScreen(pt.X, pt.Y, 0, 0, bmp.Size)
End Using
Piccanvas.IMAGE= bmp
ET MAINTENANT JE UTILISE VOTRE METHODE MAIS J ARRIVE PAS
A SAUVEGARDER L IMAGE DESSINER DANS UN FICHIER .BMP?
Commenter la réponse de tcari
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 18 nov. 2014 à 13:07
0
Merci
Bonjour
bon 6 années après LOL

bmp.Save(SaveFileDialog1.FileName, ImageFormat.bmp)


http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.save(v=vs.110).aspx
Commenter la réponse de cs_ShayW

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.