Удаление объектов GDI + - PullRequest
1 голос
/ 04 июля 2010

Я создаю приложение на C #, которое использует GDI + для рисования изображений и фигур в форме, но я не знаю, как их удалить.Допустим, у меня есть необязательная сетка, нарисованная с использованием GDI +, и когда пользователи отключают ее, я хочу, ну, в общем, отключить ее, каким-то образом удалить и не затрагивая другие объекты на рабочем холсте.Каков наилучший подход?Спасибо!

Ответы [ 3 ]

3 голосов
/ 04 июля 2010

Простой пример, перетащите CheckBox на форму:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
    }
    private void checkBox1_CheckedChanged(object sender, EventArgs e) {
        this.Invalidate();
    }
    protected override void OnPaint(PaintEventArgs e) {
        if (checkBox1.Checked) {
            e.Graphics.DrawArc(Pens.Black, this.ClientRectangle, 0, 360);
        }
    }
}

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

1 голос
/ 05 июля 2010

Кроме того, как сказали другие пользователи, я бы порекомендовал для производительности использовать Invalidate(region) только в необходимой области, а не для всей области рисования.

1 голос
/ 04 июля 2010

Windows не сохраняет ваш растровый вывод.Чтобы удалить элемент, используйте флаг, чтобы условно нарисовать его в OnPaint ().Установите флаг в false и вызовите Invalidate () для рассматриваемого элемента управления.

...