PictureBoxの透過

タグの編集
投稿者 ちゃあ  (社会人) 投稿日時 2009/8/25 18:36:06
VB2008
PictureBoxのImageに背景が透明なPNG画像を指定したものがいくつかあります。
PictureBox同士を重ねてしまうと、上のPictureBoxの画像が透過せず?下のPictureBox
の画像が見えなくなってしまうのですが、解決策はありますでしょうか?
PictureBoxのBackColorはTransparentを指定してあります。

いくつかのパーツ(画像)を選んで、それらを組み合わせて1つのものを作りたいと思っています。
投稿者 (削除されました)  () 投稿日時 2009/8/25 19:07:38
(削除されました)
投稿者 るしぇ  (社会人) 投稿日時 2009/8/25 19:10:54
まず、過去ログ検索「透過」で検索される記事の内容を試してください。
その上で、もう少し具体的なうまくいかない内容をご説明ください。 
投稿者   (社会人) 投稿日時 2009/8/25 19:12:26
>PictureBox同士を重ねてしまうと、上のPictureBoxの画像が透過せず?下のPictureBox
>の画像が見えなくなってしまうのですが、解決策はありますでしょうか?
これの解決策はないと思います。できないと記憶しています。
投稿者   (社会人) 投稿日時 2009/8/25 19:17:06
http://rucio.bbs.coocan.jp/?m=listthread&t_id=562
参考にしてください
投稿者 ちゃあ  (社会人) 投稿日時 2009/8/25 19:20:20
>まず、過去ログ検索「透過」で検索される記事の内容を試してください。
過去ログ等で検索したものはすでに試した状態です。他サイト等見ましたが該当するようなものが見つけられなかったので。

>これの解決策はないと思います。できないと記憶しています。
そうですか、別の方法を考えたいと思います。ありがとうございました。
投稿者 るしぇ  (社会人) 投稿日時 2009/8/25 20:01:20
>過去ログ等で検索したものはすでに試した状態です。
>他サイト等見ましたが該当するようなものが見つけられなかったので。
単純に「VB.NET 透過」というキーワードで調べてみたら
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7058&forum=7
[DOBON.NET Tips PictureBox上のLabelの背景が透明にならない問題の解決法]
http://dobon.net/vb/dotnet/control/labelonpicturebox.html
Transparent ってのは親のコントロールの描画を引き継ぐような仕様で
PictureBox2 の親を PictureBox1 にするテストプログラム書いたらそれっぽく
動くみたい。。。描画範囲とか課題はあるかもしれないけどね。

>別の方法を考えたいと思います。
Region による変形や
PictureBox 1つに画像を描画してしまう等
代替案は色々あると思います。
投稿者 るしぇ  (社会人) 投稿日時 2009/8/25 20:16:13
>それっぽく動くみたい
あー、やっぱだめでした。背景は引き継がれても
肝心の画像部分が欠けますね。研究の余地はあるかも
しれないけど、他の方法考えた方がいいね。失礼しました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/8/25 20:45:14
PicuteBox を「重ねる」のではなく、PictureBox1.Controls.Add(PictureBox2) すれば
PictureBox2 の背景に PictureBox1 の背景を透過表示させる事が可能です。
┏━━━┓
┃1  ┃
┃┏━┓┃
┃┃2┃┃
┃┗━┛┃
┗━━━┛
http://dobon.net/vb/dotnet/control/labelonpicturebox.html

ただしこの方法では、
┏━┓
┃1┣━━┓
┃┏┻┓2┃
┗┫4┣┓┃
 ┗┳┛┣┛
  ┃3┃
  ┗━┛
のように、複数のコントロールに跨るような配置ができないのが欠点です。


あるいは、WPF にするという手もあるかと思います。
System.Windows.Forms.PictureBox だと、こうした重ねあわせには対応できませんが、
System.Windows.Controls.Image であれば、問題なく重ね合わせる事ができますので。