前提・実現したいこと
C#フォームアプリケーションにて
カスタムコントロール:パネルを作成し、それらが影を落としつつ重ねて表示できるようにしたい。
発生している問題・エラーメッセージ
影自体は完成したが、影部分の半透明が重なっている他のパネルもろとも透け、背景が表示される。
説明しづらいけど画像みてもらえれば伝わるかと思う。
参考画像:https://gyazo.com/d3cca3671bb45ea6500f2089c2124e56
網目は背景、フォーム3つが重なり、右側と下側に影が落ちてる。
該当のソースコード
panel.Control.Add(new CostomControl(){Location = new Point(30, 30)}); panel.Control.Add(new CostomControl(){Location = new Point(60, 60)}); panel.Control.Add(new CostomControl(){Location = new Point(90, 90)});
という感じの状態。
public class CostomControl : Panel
背景Bitmapはbackground[]に格納
コンストラクタにて
Paint += CostomControl_Paint;
影描画部分 (下側/右下/右側/パネル)
private void CostomControl_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; using (TextureBrush brush = new TextureBrush(background[0])) { brush.TranslateTransform(0, Height - background[0].Height); g.FillRectangle(brush, new Rectangle(0, Height - background[0].Height, Width - background[1].Width, background[0].Height)); } using (TextureBrush brush = new TextureBrush(background[1])) { brush.TranslateTransform(Width - background[1].Width, Height - background[1].Height); g.FillRectangle(brush, new Rectangle(Width - background[1].Width, Height - background[1].Height, background[1].Width, background[1].Height)); } using (TextureBrush brush = new TextureBrush(background[2])) { brush.TranslateTransform(Width - background[2].Width, 0); g.FillRectangle(new TextureBrush(background[2]), new Rectangle(Width - background[2].Width, 0, background[2].Width, Height - background[1].Height)); } g.FillRectangle(new SolidBrush(Color.FromArgb(255, 47, 47, 47)), new Rectangle(0, 0, Width - background[2].Width, Height - background[0].Height)); }
試したこと
doublebufferをしていたので回避してみたり
マウスイベントで各コントロールをRefreshするようにしたけど、変わらず
補足情報(FW/ツールのバージョンなど)
Win10 / VisualStudio2019 / .Net framework 4.7
フォームアプリケーションを触りなれていないので、情報不足ありましたらご指摘ください。
回答1件
あなたの回答
tips
プレビュー