删除 GDI+物体

发布于 2024-09-08 14:49:51 字数 131 浏览 3 评论 0原文

我正在构建一个 C# 应用程序,它使用 GDI+ 将图像和形状绘制到表单中,但我不知道如何删除它们。假设我有一个使用 GDI+ 绘制的可选网格,当用户将其关闭时,我想将其关闭,以某种方式删除它,而不影响工作画布上的其他对象。最好的方法是什么?谢谢!

I am building a C# application that uses GDI+ to draw images and shapes to the form but I have no idea how to delete them. Let's say I have a optional grid drawn using GDI+ and when users turns it off, I want to, well, turn it off, delete it somehow and without affecting other objects on the working canvas. What is the best approach? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮华 2024-09-15 14:49:51

一个简单的例子,在窗体上放置一个CheckBox:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
    }
    private void checkBox1_CheckedChanged(object sender, EventArgs e) {
        this.Invalidate();
    }
    protected override void OnPaint(PaintEventArgs e) {
        if (checkBox1.Checked) {
            e.Graphics.DrawArc(Pens.Black, this.ClientRectangle, 0, 360);
        }
    }
}

调用Invalidate()是擦除原始绘图的关键,它强制窗体被重新绘制。基类实现的默认 OnPaintBackground 方法将所有内容恢复为战舰灰色。

A simple example, drop a CheckBox on the form:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
    }
    private void checkBox1_CheckedChanged(object sender, EventArgs e) {
        this.Invalidate();
    }
    protected override void OnPaint(PaintEventArgs e) {
        if (checkBox1.Checked) {
            e.Graphics.DrawArc(Pens.Black, this.ClientRectangle, 0, 360);
        }
    }
}

Calling Invalidate() is the key to erasing the original drawing, it forces the form to be repainted. The default OnPaintBackground method implemented by the base class turns everything back to battleship gray.

那些过往 2024-09-15 14:49:51

Windows 不存储您的位图输出。要删除项目,请使用标志在 OnPaint() 中有条件地绘制它。将标志设置为 false 并在相关控件上调用 Invalidate()。

Windows does not store your bitmap output. To remove an item, use a flag to draw it conditionally in OnPaint(). Set the flag to false and call Invalidate() on the Control in question.

栀子花开つ 2024-09-15 14:49:51

此外,其他用户表示,为了提高性能,我建议仅在必要的区域中使用 Invalidate(region) ,而不是在所有绘图区域中使用。

In addition that other users said, I'd recommend for performance using Invalidate(region) only in the necessary region, not for all the drawing area.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文