Как опираться на Winform, не имея доступа к System.windows.forms.painteventargs пространство имен?

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

Вопрос

Формируйте то, что я сделал до сих пор в своей программе, кажется, что единственный способ рисовать что -либо на Winform - через System.windows.forms.painteventargs. Что если у вас нет доступа к этим аргументам или этому пространству имен, и у вас есть доступ только к Winform, как вы рисуете (скажем, форму как прямоугольник) на Winform.

Заранее спасибо.

Это было полезно?

Решение

Если вы хотите опираться на форму (или любой другой контроль) за пределами Paint мероприятие, вы должны получить Graphics объект для этого контроля. Тогда вы можете нарисовать до содержания сердца. Обратите внимание, однако, что в следующий раз, когда появится сообщение о краске, то, что вы нарисовали, вероятно, будет стерто.

Нарисовать на форму:

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

Другие советы

Painteventargs - это класс в System.windows.forms пространство имен. Анкет Если вы работаете с формами, это означает, что у вас есть доступ к пространству имен и классу, вы, однако, не можете иметь доступ к коду формы, который вы пытаетесь нарисовать ...

Даже если у вас нет доступа к исходному коду формы, событие Paint является общедоступным, и вы можете зарегистрировать обработчик из кода за пределами формы. (Я предполагаю, что это ваша проблема.)

См. Этот простой пример класса, который имеет ссылку на форму, регистрируется с обработчиком краски, а затем делает какой -то произвольный рисунок.

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

Важная концепция в этом фрагменте заключается в том, что если у вас есть ссылка на форму (или любой объект, полученный из элемента управления), вы можете зарегистрироваться в событии краски, которое называется автоматически, когда контроль должен быть перекрашен (и вы можете нарисовать все, что хотите по этому контролю.)

В фрагменте я прошел форму в конструкторе и зарегистрировал там событие краски, но это было просто для быстрого примера. Структура вашего кода будет отличаться, но ... у вас будет форма, и будет шаг инициализации, на котором вы зарегистрируете событие, а затем создаете метод, который выполняет вашу картину.

Вы можете нарисовать другие способы, создавая и утилизируя свой собственный графический объект, но это не предпочтительный метод. С одной стороны, вы не получаете уведомление, когда вам нужно перерисовать окно, и вам нужно будет создавать другие механизмы для перераспределения, таких как таймер (как очень простой и некрасивый пример), и вам придется самостоятельно управлять графическим объектом.

Ты получить доступ к ним, подписываясь на Control.Paint Событие, и вы выполняете весь свой рисунок в обработке событий, который вы подписали. Это будет обеспечено соответствующим PaintEventArgs.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top