Как я могу удалить один нарисованный объект из winform? - PullRequest
1 голос
/ 15 октября 2019

Я создал winform и Picturebox, вы можете рисовать / размещать значки на поле Picturebox.

g2.DrawIcon(SystemIcons.Warning, new Rectangle(screenPositionX, screenPositionY, _levelWidth, _levelHeight));

вот так

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

У меня вопрос, как удалить один нарисованный объект?

Ответы [ 2 ]

1 голос
/ 15 октября 2019

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

public partial class Form1 : Form
{
    bool showIcons = true;

    public Form1()
    {
        InitializeComponent();
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        var wt = pictureBox1.ClientSize.Width;
        var ht = pictureBox1.ClientSize.Height;

        // draw grid
        for (int i = 0; i < wt; i+=32)
        {
            e.Graphics.DrawLine(Pens.Black, i, 0, i, ht);
        }
        for (int j = 0; j < ht; j+=32)
        {
            e.Graphics.DrawLine(Pens.Black, 0, j, wt, j);
        }

        if (showIcons)
        {
            // draw icons
            e.Graphics.DrawIcon(SystemIcons.Warning, 5*32-1, 2*32-1);
        }
    }

    private void drawButton_Click(object sender, EventArgs e)
    {
        showIcons = true;
        pictureBox1.Refresh();
    }

    private void clearButton_Click(object sender, EventArgs e)
    {
        showIcons = false;
        pictureBox1.Refresh();
    }
}

scr

1 голос
/ 15 октября 2019

После того, как вы нарисовали что-то на бумаге, вы не сможете вернуть его обратно, не закрасив его полностью правильным цветом или не утилизировав (очистив) все и перекрасив только те объекты, которые должныостаются. То же самое относится к PictureBox.

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

Поскольку вы показываете очень мало кода, я не знаю названий классов или методов в вашемрешение, поэтому рассмотрите этот псевдокод!

// Pseudo code

class MyForm : Form
{
    // The field that decides whether to draw the icon
    private bool showWarningIcon = true;

    // The button click handler
    public void OnButtonClick()
    {
        showWarningIcon = false;
        Invalidate();
    }

    // The paint handler
    public override void OnPaint(PaintEventArgs e)
    {
        // Draw other things, then:
        if (showWarningIcon)
        {
            g2.DrawIcon(SystemIcons.Warning, new Rectangle(screenPositionX, screenPositionY, _levelWidth, _levelHeight));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...