Очистка DrawRectangle в Windows Forms

Даже после изменения имени файла, если вы запускаете питон из терминала.

(вы можете получить ту же ошибку)

Kindly

rm -rf socket.pyc 

(ранее скомпилированный байт-код)

5
задан Jeff 11 June 2009 в 19:24
поделиться

3 ответа

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

5
ответ дан 13 December 2019 в 22:14
поделиться

Если прямоугольник полностью перекрывает графику, у вас должна быть возможность просто перерисовать или обновить нижележащую графику. Если это не так, вам нужно будет перерисовать прямоугольник, используя цвет фона, а затем обновить базовое изображение.

2
ответ дан 13 December 2019 в 22:14
поделиться

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

Обновление

Есть уже принятый ответ, но я подумал, что все равно могу поделиться образцом кода. Он рисует данный прямоугольник красным цветом на данном элементе управления и восстанавливает область через 500 мс.

public void ShowRectangleBriefly(Control ctl, Rectangle rect)
{
    Image toRestore = DrawRectangle(ctl, rect);
    ThreadPool.QueueUserWorkItem((WaitCallback)delegate
    {
        Thread.Sleep(500);
        this.Invoke(new Action<Control, Rectangle, Image>(RestoreBackground), ctl, rect, toRestore);
    });
}

private void RestoreBackground(Control ctl, Rectangle rect, Image image)
{
    using (Graphics g = ctl.CreateGraphics())
    {
        g.DrawImage(image, rect.Top, rect.Left, image.Width, image.Height);
    }
    image.Dispose();
}

private Image DrawRectangle(Control ctl, Rectangle rect)
{
    Bitmap tempBmp = new Bitmap(rect.Width + 1, rect.Height + 1);
    using (Graphics g = Graphics.FromImage(tempBmp))
    {
        g.CopyFromScreen(ctl.PointToScreen(new Point(rect.Top, rect.Left)), new Point(0, 0), tempBmp.Size);
    }

    using (Graphics g = this.CreateGraphics())
    {
        g.DrawRectangle(Pens.Red, rect);
    }
    return tempBmp;
}
2
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: