私はコンテナのレイヤーを行う必要があるプロジェクトを持っています。"ガラス"の背景を持つコントロールを作成するには?
コンテナのようなものを持っている必要があります
Form.Opacity = 0;
ユーザーは、トップ層の下の要素を見ることができますが、それらを使用することはできません。
私は透明な背景を持つ多くの例を見ましたが、私のやり方では、このコンテナ上の要素を移動する必要があります。私が見つけたものより良い:
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();
}
申し訳ありませんが、点滅していますが、より速く動作します。 ます。private void element_MouseMove(オブジェクト送信者、MouseEventArgs e)の { (e.Button == MouseButtons.Left)であれば { ((DrawElement)送信者).LEFT + =のeX - SL:私は中、)(InvalidateExを使用します.X + SP.X; ((DrawElement)送信者)。トップ+ = e.Y - SL.Y + SP.Y; ((xPanel)親).InvalidateEx(); } } 申し訳ありません、ここにコードを書く方法がわかりません=) – justAuser
問題のコード^ – justAuser
@justAuser:ダブルバッファリングを有効にしましたか? – Tigran