Comment supprimer un cercle dessiné dans windows en c# forme?
J'ai dessiné un cercle dans un formulaire windows
Pen pen = new Pen(Color.Black, 3);
Graphics gr = this.CreateGraphics();
gr.DrawEllipse(pen, 5,5,20,20);
La façon de le supprimer...
- Soit utiliser des Graphiques.Clear() avec la couleur désirée, utilisez la logique que j'ai posté une réponse, ou de l'effectuer.Invalidate(). Le dernier sera tout simplement la force de la forme de redessiner c'est la zone client qui aura pour effet de supprimer le cercle.
- Puisque vous utilisez
this.CreateGraphics
, vous n'êtes probablement pas ce dessin dans la Peinture de l'événement. Cela signifie que chaque fois que votre formulaire est redessiné (soit parce que vous appelez laInvalidate
méthode ou parce que Windows envoie unWM_PAINT
message), votre cercle sera effacé de toute façon. Si vous voulez le cercle à semi-permanent (au moins rester jusqu'à ce que vous avez explicitement l'effacer), vous devez vous assurer que vous l'attirer dans la Peinture de gestionnaire d'événements pour votre formulaire, à l'aide de l'objet Graphique qui est passé dans lePaintEventArgs
pour l'événement. - Il vous suffit de réduire la fenêtre et de le restaurer à nouveau.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez invalider le tirage au sort de la région que vous souhaitez actualiser par exemple:
sur la forme...
Vous devez effacer votre Graphique:
Mais toutes les figures dessinées seront effacées. Simplement, vous aurez alors besoin de redessiner tous les chiffres, sauf que le cercle.
Aussi, vous pouvez utiliser la méthode Invalidate:
Il indique une région à être redessiné à l'intérieur de votre Graphique. Mais si vous avez d'intersection des chiffres, vous aurez pour redessiner les chiffres que vous voulez visible à l'intérieur de la région à l'exception du cercle.
Cela peut devenir sale, vous voudrez peut-être vérifier à la conception d'un graphe de contrôle ou utiliser un graphique de mise en page bibliothèque.
CreateGraphics().Clear(Form.ActiveForm.BackColor)
En supposant que vous vous abonnant à la Peinture de l'événement ou de la transgression de l'protégé OnPaint de routine, alors vous aurez besoin pour effectuer quelque chose comme ceci:
Ensuite, lorsque vous voulez arrêter de peindre un cercle:
Vous n'avez pas "supprimer" il en soi, il n'y a rien à supprimer. C'est un dessin, vous dessinez quelque chose d'autre sur elle ou vous pouvez appeler la
Graphics.Clear()
méthode.Vous pouvez faire une figure de mêmes dimensions à l'aide de la propriété backColor de votre contrôle dans lequel vous dessinez
utiliser après votre code pour effacer votre figure.
Si u sont à l'aide de
Invalidate()
et ne fonctionne pas, faire unpanel.Refresh()
.Qui vont travailler sur vous.
En fait, vous peut supprimer votre cercle et de rien, mais votre cercle.
Tout ce dont vous avez besoin est quelque chose comme une capture d'écran de la "avant" de la zone que vous souhaitez effacer, de faire un
TextureBrush
d'elle. Vous pouvez réaliser cette étape par quelque chose comme ceci:La première ligne va vous donner une image bitmap dans votre windows forms taille. La deuxième ligne sert à enregistrer une capture d'écran dans le
_Background
bitmap.Maintenant vous créer un
TextureBrush
hors de lui:La prochaine chose que vous avez besoin sont les dimensions de votre cercle, vous devez l'enregistrer dans une variable, si elles ne sont pas une valeur fixe. Lorsque vous avez à portée de main, vous pouvez effacer la zone spécifique comme ceci:
Fait!
Même les plus complexes, les chiffres sont en mesure d'être supprimé par la présente, comme un
GraphicsPath
par exemple:Il est très simple de supprimer un cercle dessiné à partir de c.
Il y a seulement quatre étapes:-