Come disegnare su una WinForm senza avere accesso ai System.Windows.Forms.PaintEventArgs spazio dei nomi?

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

Domanda

Modulo di quello che ho fatto finora nel mio programma, sembra che l'unico modo per disegnare qualsiasi cosa su una WinForm è attraverso System.Windows.Forms.PaintEventArgs. Che cosa succede se non si ha accesso a queste argomentazioni o di questo spazio dei nomi e si ha accesso solo alla WinForm, come si fa a disegnare (dire una forma di un rettangolo) su una WinForm.

Grazie in anticipo.

È stato utile?

Soluzione

Se si vuole disegnare la forma (o qualsiasi altro controllo) al di fuori della manifestazione Paint, dovete ottenere l'oggetto Graphics per quel controllo. Poi si può dipingere al contenuto del vostro cuore. Si noti, tuttavia, che la prossima volta che un messaggio di disegno arriva, quello che hai disegnato rischia di essere cancellata.

Per disegnare la forma:

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

Altri suggerimenti

PaintEventArgs è un classe nel System.Windows.Forms namespace . Se si lavora con le forme significa che si ha accesso allo spazio dei nomi e la classe, non si può comunque avere accesso al codice della maschera che si sta tentando di disegnare su ...

Anche se non si ha accesso al codice sorgente del modulo, l'evento Paint è pubblico ed è possibile registrare un gestore ad esso dal codice al di fuori del modulo. (Sto indovinando questo è il tuo problema.)

Vai a questa semplice classe di esempio che contiene un riferimento a un modulo, registra con il gestore di vernice e poi fa un po 'di disegno arbitrario.

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);
        }
    }
}

Il concetto importante in questo frammento è che se si dispone di un riferimento ad una forma (o qualsiasi altro oggetto di controllo-derivato) è possibile registrare con l'evento di vernice che viene chiamato automaticamente ogni volta che il bisogno di controllo da ridipinto (e si può disegnare tutto quello che vuoi su quello di controllo).

nel frammento passai il modulo nel costruttore e registrato con l'evento vernice lì, ma che era solo per un esempio veloce. la struttura del vostro codice sarà diverso, ma ... si avrà una forma e ci sarà una fase di inizializzazione in cui si registra per l'evento e quindi si crea un metodo che fa la tua pittura.

È possibile disegnare altri modi con la creazione e lo smaltimento il proprio oggetto Graphics, ma questo non è il metodo preferibile. Per uno, non si ottiene una notifica quando è necessario ridisegnare la finestra e avrebbe bisogno di creare altri meccanismi per ridisegnare, come un timer (come un esempio molto semplice e brutto) e che avrebbe dovuto gestire le Graphics oggetto da soli.

get accesso ad essi mediante la sottoscrizione di Control.Paint evento, e di eseguire tutte il disegno all'interno del gestore di eventi che hai sottoscritto. Che verrà fornito con il PaintEventArgs rilevanti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top