C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Panelツールの背景を半透明にしたい

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■94477 / inTopicNo.1)  Panelツールの背景を半透明にしたい
  
□投稿者/ てっしー (1回)-(2020/04/14(Tue) 18:53:05)

分類:[VB.NET/VB2005 以降] 

Panelツールの背景を半透明にしたいのですが、方法はありますでしょうか
理想はカスタムコントロールなのですが、再描画等方法は半透明にできればいいです。
よろしくお願いします。

引用返信 編集キー/
■94482 / inTopicNo.2)  Re[1]: Panelツールの背景を半透明にしたい
□投稿者/ Hongliang (997回)-(2020/04/14(Tue) 20:42:57)
プロジェクトの種類はWindows Formsでいいでしょうか。
「Panelツール」というのは、Panelコントロールのことでしょうか、それとも何か別のものを指しているのでしょうか。
「理想はカスタムコントロール」というのは、どういう意味で理想なのでしょうか。

とりあえずWindows FormsのPanelコントロールのこととすると、BackColorにアルファ値(A)を含む色を設定することで、Panelの親コントロールとPanelのBackColorをアルファブレンドした表示にはできます。
Visual Studioのデザイナだとアルファ値込みでは設定できないみたいなので、フォームのLoadイベント等でColor.FromArgbメソッドを使って設定することになりますかね。
引用返信 編集キー/
■94486 / inTopicNo.3)  Re[2]: Panelツールの背景を半透明にしたい
□投稿者/ 魔界の仮面弁士 (2686回)-(2020/04/14(Tue) 21:24:11)
No94482 (Hongliang さん) に返信
> Visual Studioのデザイナだとアルファ値込みでは設定できないみたいなので、

できますよ。「Alpha, Red, Green, Blue」形式で入力できます。

たとえば、BackColor プロパティに半透明の青を指定する場合は、
デザイン時に『128, 0, 0, 255』と入力します。
引用返信 編集キー/
■94489 / inTopicNo.4)  Re[2]: Panelツールの背景を半透明にしたい
□投稿者/ てっしー (2回)-(2020/04/15(Wed) 09:18:32)
てっしー さんの Web サイト
2020/04/15(Wed) 09:21:20 編集(投稿者)
2020/04/15(Wed) 09:19:59 編集(投稿者)

すみません
いろいろと情報不足でした
> プロジェクトの種類はWindows Formsでいいでしょうか。
→Windows Formsです

> 「Panelツール」というのは、Panelコントロールのことでしょうか、それとも何か別のものを指しているのでしょうか。
→ツールボックス内のPanelコントロールです

> 「理想はカスタムコントロール」というのは、どういう意味で理想なのでしょうか。
→カスタムコントロールで配置してプロパティを変えるだけで背景の透過具合を設定できるというのが理想です。

Hongliang さん、魔界の仮面弁士さんの方法を試してみたのですが、背景の色が変わるだけで、背景自体の透明度は変わりませんでした。
すみませんこれは書き方が悪かったのですが、パネルの背景色を半透明にするのではなく、パネル自体を半透明にしたいです。
目的は、ポップアップメッセージなどで、メッセージが表示されている背景が半透明のオブジェクトで覆われている状態を表現したいです。
添付したイメージのような感じを目指しています。
引用返信 編集キー/
■94490 / inTopicNo.5)  Re[3]: Panelツールの背景を半透明にしたい
□投稿者/ 魔界の仮面弁士 (2687回)-(2020/04/15(Wed) 09:38:45)
2020/04/15(Wed) 09:49:26 編集(投稿者)

No94489 (てっしー さん) に返信
> 目的は、ポップアップメッセージなどで、メッセージが表示されている背景が半透明のオブジェクトで覆われている状態を表現したいです。
> 添付したイメージのような感じを目指しています。

それでは、こういう方法は如何でしょうか?
前半の URL を試してみてください。CopyFromScreen で得た画面キャプチャを
別フォームに表示することで、スモークをかけたように見せかけています。
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=9863&reno=9856&oya=9839&mode=msgview&page=0


> Hongliang さん、魔界の仮面弁士さんの方法を試してみたのですが、背景の色が変わるだけで、背景自体の透明度は変わりませんでした。

Panel の背景画像の事だとしたら、半透明色を持つ png 画像などを割り当てておくことができます。

ただ、これらは「背景色・背景画像」を重ね合わせて描画するだけの代物であり、
Panel の背面にあるコントロールなどを透かし見ることができるというものではありません。


> パネル自体を半透明にしたいです。

WinForms は、そういうデザインには向きません。内容次第では、WPF の方が融通が利くかもしれません。
https://docs.microsoft.com/ja-jp/dotnet/framework/wpf/advanced/how-to-make-a-uielement-transparent-or-semi-transparent

WinForms の場合、コントロールを半透明にすることはできないので、
『レイヤードウィンドウ』を使うか、『半透明相当の描画処理を行う』ことで回避します。


前者の Layered Window は、その性質上、Panel などのコントロールに対しては適用できず、
トップレベルウィンドウ(いわゆる Form)にしか使えないという制限があるため、
Panel の代わりとして「枠無し半透明 Form」を通常の Form に重ねて配置することで、
それっぽく見せるという手法になります。

レイヤードウィンドウは、Form の Opacity プロパティを指定することで適用されます。
全体を同じ透明度にするのではなく、グラデーションのかかった透明度などにする場合は、
UpdateLayeredWindow API が必要です。
https://www.ipentec.com/document/csharp-winform-layerd-window-create
https://www.ipentec.com/document/csharp-create-layered-window


一方、後者の独自描画処理というのは、Panel を使わずに、
その親コントロール上に直接、半透明画像などを描画する手法になります。
親の Paint イベントにて、e.Graphics に対する GDI+ 描画を行う手法や
API による描画などがありますが、それなりの手間がかかります。
https://microsoft.public.jp.visualc.narkive.com/2y1xDUx9

そもそも、Panel 上の子コントロール等の面倒は見れないので、
それらは個別に同様の透過モドキ処理を組み込まないといけません。


まぁ、今回は Panel の半透明化が目的というわけではなさそうですが…。
引用返信 編集キー/
■94501 / inTopicNo.6)  Re[1]: Panelツールの背景を半透明にしたい
□投稿者/ エイ (3回)-(2020/04/15(Wed) 19:24:23)
No94477 (てっしー さん) に返信
> Panelツールの背景を半透明にしたいのですが、方法はありますでしょうか
> 理想はカスタムコントロールなのですが、再描画等方法は半透明にできればいいです。
> よろしくお願いします。
>
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=20683
これで出来るかな?
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ