PictureBoxを重ねた時、下のPictureBoxを写すには?

タグの編集
投稿者 hazi  (社会人) 投稿日時 2012/12/14 23:34:58
「VB2010」を使ってます。
色々調べてみても、解決策がなかったので、質問させてもらいます!

まず、一番上にPictureBox1・PictureBox2・PictureBox3があります。
その下にPictureBox4があります。

PictureBox1~3の画像は、真ん中に絵が描いてあって、その周りは透明です。
PictureBox4の画像は、PictureBox1~3よりも大きい絵が真ん中にあって、その周りは透明です。

PictureBox1~3とPictureBox4を重ねると、PictureBox4が消えてしまいます。
(フォームの色がPictureBoxの背景になってしまいます。)
これを、解決したいんですが・・。

ちなみに、PictureBox1~3の下でPictureBox4を移動させたいです。
移動する時に、スマホのように、「サー」っと移動するようにさせたいです。

親コントロールを変更すると、移動するときに変になるので、諦めました。。

同じような質問が過去にあったんですが、過去は「VB2008」だったので、「VB2010」ではできないのかな?と思って投稿しました。

よろしくお願いします。
投稿者 るきお  (社会人) 投稿日時 2012/12/15 12:11:18
こんにちは。

●1
PictureBoxを透明にして後ろのものが透けて見える状態にすることはできません。
透明でグラフィックを重ねたい場合はすべてを1つのPictureBoxの中で処理する必要があります。
PictureBox以外の選択肢もありますが事情はかわりません。

2つ画像を重ねて透明な部分は下が見えるようにする例は以下で紹介しています。
http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample140ImageTransparent.htm
この例はVB2010でも使用できます。
VB2002(VB.NET)以降のサンプルはごくわずかな例外を除いてVB2010でも使用できます。

●2
それから、私は未確認ですが2つのPictureBoxが親子関係にある場合は、透過させることは可能なようです。
この話は下記投稿で説明されていますので参考にしてください。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9301

●1の手法は応用が利きます。●2の手法はこの手法が使えるケースであれば問題を簡単に解決してくれそうです。
投稿者 hazi  (社会人) 投稿日時 2012/12/16 12:00:47
お返事遅くなってすいません。
そして、返信ありがとうございます。

●1に書いてあったURLを参考に、WPFで試してみることにします。
見慣れたフォーム・コードとは違うので、ちょっと避けていたんですが、それも難しいみたいなので、挑戦してみます。

ちなみに、「Windows フォーム コントロール ライブラリ」を使って、dll作成後、作成したコントロールの上にPictureBoxを重ねてみたんですが、やはり無理でした。。
作成したコントロールの背景がPictureBoxの背景になってしまいました。。

今回、久々にVBをいじっているので、また質問があったら、させてもらいます!
ありがとうございました♪
投稿者 るきお  (社会人) 投稿日時 2012/12/16 13:37:46
>●1に書いてあったURLを参考に、WPFで試してみることにします。
●1で紹介しているサンプルはWPFではありません。
Windowsフォームのサンプルです。
投稿者 YuO  (社会人) 投稿日時 2012/12/16 19:48:28
普通に(WPFの)Imageコントロール使えば透過は処理されると思いますが……。
投稿者 hazi  (社会人) 投稿日時 2012/12/16 21:50:28
るきおさん>>

教えてくださったURLがWindowsフォームのサンプルというのは、知っています。
そのURLの最後のレスに、WPFのことが、ほんのちょっとですが触れられていたので、そのほんのちょっとを参考にしてやってみよう、という意味でした。
説明不足ですいません。

YuOさん>>

返信ありがとうございます。
WPFはあまり使ったことがないので、どういう機能があるのか知りませんでした。。
それとWPFだと、Windowsフォームとコードや作成画面が違うので、できるなら慣れてる方で・・・と思ってWPFは使わないでいました。
今は、WPFを使ってなんとかかんとかやっています。
また、質問が出るかもしれないので、その時はまたよろしくお願いします!