やりたいこと
C#のフォームアプリでPictureBoxを2枚重ねてレイヤーのように透過表示させる。
はまったところ その1
前面のPictureBox の BackColor を Color.Transparent にする。これで背面のPictureBoxが透けて見えるはずと思った。しかし、実際には背面のPictureBoxをも透過して Form 本体が透けて見えてしまった。BackColor が Color.Transparent のとき、透けて見えるのは背面のコントロールではなく親コントロールらしい。
解決策としては、FormのLoadイベントで、背面のPictureBoxを前面のPictureBoxの親として設定する。
pictureBoxFront.BackColor = Color.Transparent; pictureBoxFront.Parent = pictureBoxBack;
はまったところ その2
ところが、上記のように設定すると前面のPictureBoxが消えて見えなくなる場合がある。この現象が起こる条件はよく分からない。ただ、前面のPictureBoxをデザイナで配置していたのが問題のように思われる。
解決策として、前面のPictureBoxはデザイナで配置せず、FormのLoadイベントで生成・設定する。
pictureBoxFront= new PictureBox(); pictureBoxFront.BackColor = Color.Transparent; pictureBoxFront.Parent = pictureBoxBack; pictureBoxFront.Width = pictureBoxBack.Width; pictureBoxFront.Height = pictureBoxBack.Height; pictureBoxFront.Location = new Point(0, 0); //pictureBoxBack.Controls.Add(pictureBoxFront); 不要?