我有一個項目,我需要做一層容器。如何使用「玻璃」背景進行控制?
容器必須有類似:
Form.Opacity = 0;
用戶可以看到在頂層的元素,但不能使用它們。
我看到很多帶透明背景的例子,但以我的方式,我需要在此Container上移動元素。我發現的更好:
class xPanel : Panel
{
public xPanel()
{
SetStyle(ControlStyles.Opaque, true);
}
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
return createParams;
}
}
protected override void OnPaint(PaintEventArgs e)
{
//PaintParentBackground(e);
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(0, Color.White)),
0, 0, Width, Height);
}
public void InvalidateEx()
{
if (Parent == null)
return;
Rectangle rc = new Rectangle(this.Location, this.Size);
Parent.Invalidate(rc, true);
}
}
但是拖動元素或重繪時閃爍。
我不知道如何解決這個問題。有想法?
我用InvalidateEx(),在:
protected override void OnLocationChanged(EventArgs e)
{
if (Parent != null)
((xPanel)Parent).InvalidateEx();
}
對不起,它閃爍,但工作更快。我用InvalidateEx(),在: 私人無效element_MouseMove(對象發件人,MouseEventArgs E) { 如果(e.Button == MouseButtons.Left) { ((DrawElement)發送器)。左+ =的eX - SL .X + SP.X; ((DrawElement)sender).Top + = e.Y - SL.Y + SP.Y; ((xPanel)Parent).InvalidateEx(); } } 對不起,我不知道如何在這裏寫代碼=) – justAuser 2012-01-17 08:33:13
有問題的代碼^ – justAuser 2012-01-17 08:52:36
@justAuser:你是否啓用雙緩衝? – Tigran 2012-01-17 09:05:48