質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

4521閲覧

Visual Basic 透過について

harumi

総合スコア407

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/07/06 09:23

編集2018/07/07 00:32

visual basicで一部を透過する方法を探しています。
Windows.Formsで作ろうと考えています
メインのパネルのプロパティにはOpacityという項目があり数値を変えると透過されました。
しかし、それをするとメインのパネルに乗っかっているUIたちも同じように透過されてしまいました。
一部を透過できる方法があれば教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2018/07/06 16:26

Windows.Formsですか?WPFですか?
harumi

2018/07/07 00:31

Windows.Formsです追記しておきます
sazi

2018/07/07 01:57 編集

勘違いしていたみたい。透明なフォームにUIが配置されているってことですね。
guest

回答2

0

ベストアンサー

Formの一部のみ半透明にするのはできなくはありません
「レイヤードウインドウ」で検索してみてください。
レイヤードウインドウを使った方法では、コントロールの描画を自分で行わないといけなくなったりとかなり大変でお勧めはしません。

次に、なるべく簡単な方法の提案です。
1.半透明表示のみを行うForm1を作る
2.コントロールをレイアウトするForm2を作る
3.Form1.Opacityにて半透明にする。
4.Form2.TransparencyKeyにて透過する
5.Form2をForm1の動きに追随させるようにする。

以下サンプル
Form1を半透明フォーム、Form2を半透明にしないコントロールを配置するフォームとする

VB.NET

1Public Class Form1 2 3 Private GUIForm As New Form2 4 5 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 6 '半透明にする 7 Me.Opacity = 0.6 8 9 'GUIのフォームの設定 10 GUIForm.FormBorderStyle = FormBorderStyle.None 11 GUIForm.StartPosition = FormStartPosition.Manual 12 13 'BackColorではなくBackgroundImageを単色で塗りつぶして透過させる 14 'Panelなど、FormのBackColorに連動して変化するものへの対応 15 Dim bg As Bitmap = New Bitmap(GUIForm.Width, GUIForm.Height) 16 Using g As Graphics = Graphics.FromImage(bg) 17 g.Clear(Color.Green) 18 End Using 19 GUIForm.BackgroundImage = bg 20 GUIForm.TransparencyKey = Color.Green 21 22 'GUI用フォームを半透明フォームと同じ位置、同じ大きさにする 23 GUIForm.Location = Me.PointToScreen(New Point(0, 0)) 24 GUIForm.Size = Me.ClientSize 25 26 'GUIの表示 27 GUIForm.Show(Me) 28 29 End Sub 30 31 Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize 32 GUIForm.Size = Me.ClientSize 33 End Sub 34 35 Private Sub Form1_LocationChanged(sender As Object, e As EventArgs) Handles Me.LocationChanged 36 GUIForm.Location = Me.PointToScreen(New Point(0, 0)) 37 End Sub 38End Class 39

このような感じとなります。
左側のコントロールがForm1にあるコントロールで、右側のコントロールがForm2にあるコントロールです。
こんなかんじ

ただ、この方法ですとコントロールがあるフォームが別フォームとなるため、Form2側にあるコントロールを触ると、Form1がActiveなフォームではなくなってしまいます。

投稿2018/07/07 01:25

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Opacityでの動作が要件を満たさないなら、visibleとかzオーダーで工夫するというのはどうですか

投稿2018/07/06 09:47

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問