¿Cómo recurrir a una forma de ganar sin tener acceso a System.Windows.Forms.Painteventargs Namespace?

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

Pregunta

Forma lo que he hecho hasta ahora en mi programa, parece que la única forma de dibujar cualquier cosa en una forma de ganar es a través de System.Windows.Forms.Paineventargs. ¿Qué pasa si no tiene acceso a estos argumentos o a este espacio de nombres y solo tiene acceso a WinForm, cómo dibuja (digamos una forma como un rectángulo) en una forma de ganar?

Gracias por adelantado.

¿Fue útil?

Solución

Si desea recurrir al formulario (o cualquier otro control) fuera del Paint evento, tienes que obtener el Graphics objeto para ese control. Entonces puedes pintar al contenido de tu corazón. Tenga en cuenta, sin embargo, que la próxima vez que aparezca un mensaje de pintura, es probable que se borre.

Para dibujar en el formulario:

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

Otros consejos

Pintarventargs es una clase en el System.Windows.Forms Namespace. Si está trabajando con formularios, significa que tiene acceso al espacio de nombres y a la clase, es posible que no tenga acceso al código del formulario en el que está intentando dibujar ...

Incluso si no tiene acceso al código fuente del formulario, el evento de pintura es público y puede registrarle un controlador desde el código fuera del formulario. (Supongo que este es tu problema).

Vea esta clase de ejemplo simple que tiene una referencia a una forma, se registra con el controlador de pintura y luego hace un dibujo 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);
        }
    }
}

El concepto importante en este fragmento es que si tiene una referencia a un formulario (o cualquier objeto derivado del control) puede registrarse en el evento de pintura que se llama automáticamente cada vez que el control debe ser repintado (y puede dibujar todo lo que desee Sobre ese control.)

En el fragmento pasé el formulario en el constructor y me registré con el evento de pintura allí, pero eso fue solo para un ejemplo rápido. La estructura de su código será diferente, pero ... tendrá un formulario y habrá un paso de inicialización en el que se registre para el evento y luego cree un método que haga su pintura.

Puede dibujar otras formas creando y eliminando su propio objeto gráfico, pero este no es el método preferible. Por un lado, no se le notifica cuando necesita volver a dibujar la ventana y necesitaría crear otros mecanismos para volver a dibujar, como un temporizador (como un ejemplo muy simple y feo) y tendrá que administrar el objeto gráfico usted mismo.

obtener acceso a ellos suscribiéndose al Control.Paint evento, y realiza todo su dibujo dentro del controlador de eventos que ha suscrito. Que se proporcionará con el relevante PaintEventArgs.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top