Comment dessiner un Winform sans avoir accès à l'espace de noms System.Windows.Forms.PaintEventArgs?

StackOverflow https://stackoverflow.com/questions/7807671

Question

Formulaire ce que je l'ai fait jusqu'à présent dans mon programme, il semble que la seule façon de tirer quoi que ce soit sur un WinForm est par System.Windows.Forms.PaintEventArgs. Que faire si vous n'avez pas accès à ces arguments ou cet espace de noms et vous n'avez accès au WinForm, comment tirez-vous (dire une forme comme un rectangle) sur un WinForm.

Merci à l'avance.

Était-ce utile?

La solution

Si vous voulez dessiner sur la forme (ou tout autre contrôle) à l'extérieur de l'événement Paint, vous devez obtenir l'objet Graphics pour ce contrôle. Ensuite, vous pouvez peindre au contenu de votre cœur. Notez toutefois que la prochaine fois un message de peinture vient, ce que vous avez dessiné est susceptible d'être effacé.

Pour dessiner la forme:

using (Graphics g = this.CreateGraphics())
{
    // do all your drawing here
}

Autres conseils

PaintEventArgs est de classe dans la espace de noms System.Windows.Forms. Si vous travaillez avec des formulaires, cela signifie que vous avez accès à l'espace de noms et la classe, vous ne pouvez pas cependant avoir accès au code du formulaire que vous essayez de dessiner sur ...

Même si vous n'avez pas accès au code source du formulaire, l'événement Paint est public et vous pouvez enregistrer un gestionnaire à lui à partir du code en dehors du formulaire. (Je devine que c'est votre problème.)

Voir ce simple exemple de classe qui a une référence à un formulaire, les registres avec le gestionnaire de peinture et ne puis certains dessin arbitraire.

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    class Painter {
        public Painter(Form form) {
            form.Paint += new PaintEventHandler(form_Paint);
        }

        void form_Paint(object sender, PaintEventArgs e) {
            e.Graphics.DrawLine(Pens.Black, 0, 0, 20, 20);
        }
    }
}

Le concept important dans cet extrait est que si vous avez une référence à une forme (ou tout autre objet dérivé de contrôle) vous pouvez vous inscrire à l'événement de peinture qui est appelée automatiquement chaque fois que le besoin de contrôle à repeindre (et vous pouvez dessiner tout ce que vous voulez sur ce contrôle.)

Dans l'extrait je suis passé le formulaire dans le constructeur et enregistré avec l'événement de peinture il y a, il est juste un exemple rapide. La structure de votre code sera différent, mais ... vous aurez un formulaire et il y aura une étape d'initialisation où vous vous inscrivez à l'événement, puis créer une méthode qui fait votre peinture.

Vous pouvez dessiner d'autres façons de créer et de disposer de votre propre objet graphique, mais ce n'est pas la méthode préférable. D'une part, vous ne serez pas informé lorsque vous avez besoin de redessiner la fenêtre et aurait besoin de créer d'autres mécanismes pour redessiner comme une minuterie (comme un exemple très simple et laid) et vous devez gérer l'objet Graphics vous.

get leur accès en vous inscrivant à la

scroll top