C#半透明“收藏夹”控制调用家长paint方法
-
22-08-2019 - |
题
我试图创建收藏夹效果一>我的应用程序中。为了实现这一点,我有与表示半透明覆盖和托管所有必要的内容一个单独的面板的面板的用户控件。
当我告诉这个用户控件常常试图将自身呈现2-3倍导致出现让越来越暗的背景。我考虑在该用户控件执行以下操作
protected override void OnPaint ( PaintEventArgs e )
{
if ( Parent != null )
{
Parent.Refresh();
}
base.OnPaint( e );
}
不幸的是,这似乎引起可怕环效应,由此父重绘itelf然后TEH用户控件重绘itelf ...非常杂乱。有不知何故停止这种方式?可能通过从应用程序采取PRINTSCREEN图像,显示在与覆盖用户控制ontop的?
修改强>
我已经注意到这个问题虽然林希望我不需要创建为每个灯箱一种新的形式创建!
解决方案 2
此行为似乎是因为我的的OnPaint函数e.g内更新所述用户控件的区域。
protected override void OnPaint ( PaintEventArgs e )
{
// Update Region here
base.OnPaint( e );
}
这显然导致控制无效本身和再拉深本身克服这个我已经使用:
Graphics g = e.Graphics;
g.SetClip( Region, CombineMode.Intersect );
这然后可以用于疼痛的不透明效果夹,同时允许内容来绘图。
其他提示
作为一个经验法则,.Invalidate()通常比.REFRESH(更好),因为.REFRESH()会导致立即重绘,所以如果你把它叫做两次,被做了两个重绘。我不认为它会帮助你在这里多,虽然。
不隶属于 StackOverflow