6

所以,我对windows forms开发很不熟悉。

我正在尝试创建一个“嘿,我正忙着做事”的组件,它只是旋转一个形状。我希望这个控件是瞬态的,并在任何其他控件之上绘制。该类直接继承自 Control。

所以我在构造函数中有这个:

SetStyle(ControlStyles.Opaque, true);

还有这个:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams parms = base.CreateParams;
        parms.ExStyle |= 0x20; 
        return parms;
    }
}

这让我得到了一个可以在其他控件之上绘制的控件。

现在我的问题是这个。我每秒重绘几次控件,以提供平滑动画的外观。但是,我不知道如何清除前一帧中绘制的内容。轮流使用整个控件黑色e.Graphics.Clear(Color.Transparent)OnPaint

有没有办法只清除控件的绘制内容?

我注意到调整控件大小会清除背景。

不起作用的事情

  1. 覆盖 OnPaintBackground 什么都不做。或者只是调用 base.OnPaintBackground。结果相同。
4

2 回答 2

4

好的,我在这里找到了解决方案: https ://web.archive.org/web/20141227200000/http://bobpowell.net/transcontrols.aspx

实际上必须使父控件无效才能保留透明背景。

于 2009-10-22T20:31:43.070 回答
2

您可能必须覆盖本文介绍的 OnPaintBackground:http ://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

当需要清除控件以强制调用 OnPaintBackground 时,您可能还需要使控件无效。

于 2009-10-22T20:02:30.073 回答