hojatIzadi Ответов: 1

Как я могу стереть линию или строку, нарисованную на панели, но не все из них


Привет
У меня есть проблема в моем проекте,это часть моего кода:
private void draw_notes(int x, int y)
        {
            y = (y / 5) * 5;
            
            note.DrawString("w", f1, Brushes.Black, x - 20, y - 41);
            for (int i = 9; i <= 15; i = i + 2)
            {

с помощью этого кода я могу нарисовать "w", но я не могу стереть некоторые из них .
Я проверил
note.Clear(Color.color);

но с этим кодом вся панель будет стерта.

Что я уже пробовал:

Я использовал - - - примечание.Clear (Color. color) - - - но это не работает, потому что я хочу очистить некоторые из них, а не все

1 Ответов

Рейтинг:
0

OriginalGriff

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

Единственный способ сделать это правильно-изменить способ рисования вещей (что было бы хорошей идеей в любом случае - вы не должны "цепляться" за графические объекты, даже если вы их создали).
Вместо того, чтобы рисовать вещи, когда вы хотите, нарисуйте их все на панели.Нарисуйте обработчик событий из списка" объектов " для рисования и вызовите Invalidate на панели при изменении списка. Таким образом, вы можете удалить объект из списка, и он будет удален с панели, не затрагивая другие объекты.
Событие Paint предоставляет графический объект как часть PaintEventArgs, поэтому вам не нужно создавать свой собственный.

Он также имеет то преимущество, что рисунок "устойчив" - он будет перерисован, как это было, например, при сворачивании и восстановлении вашего приложения. Ваш текущий метод не позволяет этого.