首页 > 解决方案 > 如何从 winform 中删除一个绘制的对象?

问题描述

我创建了一个winform和一个picturebox,你可以在picturebox上绘制/放置图标。

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

像这样

但我的问题是我希望能够通过按下按钮来删除警告图标,但我不知道如何。我已经尝试过 g2.Clear,但这会删除所有图标。我也尝试过绘制它们,但这会覆盖所有内容,我找不到正确的背景颜色。

我的问题是,如何删除单个绘制的对象?

标签: c#.netwinforms

解决方案


您需要一个字段来跟踪是否要绘制图标。由于按钮按下而翻转该值,并在绘制(绘制事件)时使用该值来确定要绘制的内容。

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


推荐阅读