【问题标题】:Deleting GDI+ objects删除 GDI+ 对象
【发布时间】:2010-07-05 21:02:59
【问题描述】:

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

【问题讨论】:

    标签: c# winforms gdi+


    【解决方案1】:

    一个简单的例子,在表单上放一个 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 方法将一切都变回战舰灰色。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        除了其他用户说的,我建议只在必要区域使用Invalidate(region) 来提高性能,而不是在所有绘图区域。

        【讨论】:

          猜你喜欢
          • 2014-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-26
          • 2019-06-22
          • 1970-01-01
          • 1970-01-01
          • 2012-12-16
          相关资源
          最近更新 更多