フォームの背景を透明にした状態で、ラベルの背景も半透明にしたいです。
つまり、デスクトップに重ねれば、ラベルの部分ではデスクトップが透けて見えるようにしたいです。
しかし、やってみると、ラベルの背景はフォームの透過色になってしまいます。
どうすればよいでしょうか。
Visual Studio C#でやっています。
C#でのコントロールの透過について
Re: C#でのコントロールの透過について
みなと さんが書きました:フォームの背景を透明にした状態で、ラベルの背景も半透明にしたいです。
みなと さんが書きました:しかし、やってみると、ラベルの背景はフォームの透過色になってしまいます。
- フォームの背景を透明にする,とはどうやって行いましたか。
- Opacity プロパティを変更した場合,子のコントロール全ての透過率が変更されるはずです
- TransparencyKey プロパティを変更した場合,指定した背景色を持つ子孫コントロールは完全に透過となり,その親の色にかかわらず裏側の情報が描画されるはずです
- BackColor プロパティにColor.Transparentを設定したのであれば,そもそも意味がないです
- ラベルの背景を半透明にする,というのはどのようにして行いましたか。
OpacityプロパティはFormクラスのプロパティであるため,Windows Forms標準の方法でコントロールを半透明にすることはできないはずです。
これ自体は,TransparencyKeyを使う方法が一番簡単にできます。みなと さんが書きました:つまり、デスクトップに重ねれば、ラベルの部分ではデスクトップが透けて見えるようにしたいです。
オフトピック
WS_EX_LAYEREDにあるように,Windows 8以降では子ウィンドウもWS_EX_LAYEREDをサポートします。
このため,CreateParams.ExStyle プロパティにWS_EX_LAYEREDを追加し,SetLayeredWindowAttributes 関数を呼び出すようにすれば,半透明のコントロールは作成可能だと思います。
そこまでしてやる必要があるのか,という疑問は出てきますが……。
このため,CreateParams.ExStyle プロパティにWS_EX_LAYEREDを追加し,SetLayeredWindowAttributes 関数を呼び出すようにすれば,半透明のコントロールは作成可能だと思います。
そこまでしてやる必要があるのか,という疑問は出てきますが……。