Picturebox de forme ronde [Résolu]

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 16 déc. 2012 à 21:16 - Dernière réponse : foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention
- 20 déc. 2012 à 15:49
Bonjour

comment découper un picturebox en forme ronde
j'essaie avec pic.region mais comment créer
la liste de points il faut definir 360 points
pour décrire le cercle ?

merci
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Utilisateur anonyme - 17 déc. 2012 à 00:12
3
Merci
Salut ShayW,

Non, pas besoin de définir des points, tu as juste à ajouter une élipse à un Graphic path.


Dim graph As New System.Drawing.Drawing2D.GraphicsPath
graph.AddEllipse(0, 0, 200, 200)
Dim reg As Region = New Region(graph)
Me.Region = reg

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 17 déc. 2012 à 07:53
0
Merci
Merci
une question de compréhension
pourquoi les méthodes graphique du system.drawing.graphic doivent etre appelées dans
l'évenement paint du control où ils sont dessinées
et ici (le code donné au dessus) n' a pas besoin
d'etre écrit dans l'évenement paint
Commenter la réponse de cs_ShayW
Utilisateur anonyme - 17 déc. 2012 à 12:07
0
Merci
Je ne sais pas. Peut être parce qu'on ne dessine rien sur le contrôle.
Tu te poses trop de questions ShayW
Commenter la réponse de Utilisateur anonyme
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 17 déc. 2012 à 12:26
0
Merci
Tu te poses trop de questions ShayW


Ah oui c'est vrai je n'ai pas dormi de la nuit à cause de ça et meme allez consulter le psy
Commenter la réponse de cs_ShayW
Utilisateur anonyme - 17 déc. 2012 à 12:44
0
Merci
Tant que tu n'entends pas des petites voix dans ta tête...
Commenter la réponse de Utilisateur anonyme
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 20 déc. 2012 à 13:58
0
Merci
Bonjour ShayW,

Rien ne vous oblige à utiliser les méthodes de la classe Graphics en dehors de l'évènement Paint d'un contrôle.

Par exemple :
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Dim g As Graphics = Me.Button1.CreateGraphics()
        g.FillEllipse(Brushes.Blue, 3, 3, 10, 10)

    End Sub


Donc sur le clic du bouton, la première ligne de code permet de récupérer le Graphics du contrôle (Tel qu'il est dessiné au moment du clic)
et ensuite le FillEllipse vient dessiner un petit rond bleu par dessus.

L'intérêt de l'utiliser dans l'évènement Paint est que c'est l'évènement qui va être appelé à chaque fois que le contrôle doit être dessiné à l'écran. C'est pour cela qu'il est utilisé pour substituer l'affichage standard du contrôle en le redéfinissant complètement ou en y ajoutant des éléments.

D'ailleurs vous allez vite vous en rendre compte si vous testez mon code ci-dessus. Dès que la sourie va quitter le survol du bouton, le petit rond bleu va disparaître car l'évènement Paint va être rappelé par le contrôle (car son affichage doit passer de survolé à non-survolé). Donc il va reprendre son affichage standard.

En espérant avoir aider.
Commenter la réponse de foliv57
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 20 déc. 2012 à 14:32
0
Merci
Auto correction désolé:
Rien ne vous oblige à utiliser les méthodes de la classe Graphics uniquement dans l'évènement Paint d'un contrôle.
Commenter la réponse de foliv57
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 20 déc. 2012 à 15:22
0
Merci
Bonjour foliv57
j'ai testé

pourquoi si j'écris

Dim g As Graphics = Me.PanelGame.CreateGraphics()
        g.FillEllipse(Brushes.Blue, 3, 3, 100, 110)


dans l'evenement load de la form ça ne marche pas
Commenter la réponse de cs_ShayW
foliv57 423 Messages postés vendredi 17 novembre 2006Date d'inscription 15 juillet 2014 Dernière intervention - 20 déc. 2012 à 15:49
0
Merci
Dans l'évènement Load, les contrôles ne sont pas encore rendu à l'écran.

Il faut tenter l'évènement Shown qui devrait être lancé après rendu du formulaire. Mais même la, il faudrait être sur que le contrôle en question (PanelGame) ne fait pas un Repaint à la fin de Form_Shown.

En faite c'est exactement à cause de ces questions que les méthodes Graphics sont très rarement utilisées en dehors de l'évènement Paint.
Car il y a pas mal de choses qui demande à un contrôle de se redessiner. Par exemple si vous déplacez la form en partie en dehors de l'écran et que vous faite revenir la form, chaque contrôles qui se trouvaient dans la partie cachée vont relancer leur évènement Paint.
(En poussant plus loin on constate même que l'évènement Paint est lancé avec un masque uniquement sur la partie du contrôle à redessiner. Cette zone est appelée ClipRectangle)

Ce que je conseil toujours pour bien comprendre ce genre de phénomène est de faire ceci :
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Console.WriteLine("La form se charge")
    End Sub


    Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        Console.WriteLine("La form est affichée")
        Dim g As Graphics = Me.Panel1.CreateGraphics()
        g.FillEllipse(Brushes.Blue, 3, 3, 10, 10)
    End Sub

    Private Sub Panel1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        Console.WriteLine("Le panel doit se dessiner dans le rectangle {0}", e.ClipRectangle.ToString)
    End Sub


En y ajoutant l'heure à la milliseconde dans les Console.WriteLine, on peut se faire une bonne idée de l’enchaînement des évènements.

Avec l'exemple ci-dessus, placez un panel assez grand au milieu de votre form et amusez vous à déplacer la form en partie en dehors de l'écran. Vous constaterez en la faisant revenir à l'écran que le panel va lancer plein de paint avec un Clip d'une largeur de 1 ou 2 pixels en fonction de la vitesse à laquelle vous allez déplacer la form car le panel se redessine petit à petit.
Commenter la réponse de foliv57

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.