c# - 如何从 winform 中删除一个绘制的对象?
问题描述
我创建了一个winform和一个picturebox,你可以在picturebox上绘制/放置图标。
g2.DrawIcon(SystemIcons.Warning, new Rectangle(screenPositionX, screenPositionY, _levelWidth, _levelHeight));
但我的问题是我希望能够通过按下按钮来删除警告图标,但我不知道如何。我已经尝试过 g2.Clear,但这会删除所有图标。我也尝试过绘制它们,但这会覆盖所有内容,我找不到正确的背景颜色。
我的问题是,如何删除单个绘制的对象?
解决方案
您需要一个字段来跟踪是否要绘制图标。由于按钮按下而翻转该值,并在绘制(绘制事件)时使用该值来确定要绘制的内容。
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();
}
}
推荐阅读
- docker - VSTS 中的 Docker Compose 任务:无法在 http+docker://localhost 连接到 Docker 守护程序 - 它正在运行吗?
- ios - 将 UIPanGestureRecognizer 速度添加到 UIViewPropertyAnimator
- javascript - Promise 对象内的 setTimeout
- database - 如何让 Postgres 使用受信任的 SSL 证书对另一个 Postgres 数据库进行 dblink
- intellij-idea - 如何更正 Intellij 中错误导入的项目。出现错误 - 不是有效的项目 ID
- batch-file - 使用批处理文件检查具有特定扩展名的文件是否在特定文件夹中
- mysql - SQL Distinct Group By Query
- c++ - c++中指针的类型是如何实现的?
- django - 如何在 Django 的 change_password 中显示错误消息
- java - RuntimeException:com.android.builder.dexing.DexArchiveMergerException:无法合并 dex