- PR -

[C#]ラベルの背景部分を透過させるには?(画面が32ビットのとき)

1
投稿者投稿内容
eShin
会議室デビュー日: 2004/02/05
投稿数: 3
投稿日時: 2004-02-05 13:41
開発環境はWindowsXP、C#(.NET 2003)です。

クライアント領域を透過にしたフォーム上にラベルを配置して、このラベルの文字以外の背景部分を透過させたいと考えています。(つまり、文字だけが表示されていて周囲は透けている感じです。)

下記のようなコードで、PCの画面の色が16ビットの時は実現できました。
しかし画面の色が32ビットのときは、フォームのクライアント領域は透明ですが、ラベルの背景が透明にならず紫色になってしまいます。

画面の色が32ビット時も透明にするには、どのようにすればよいのでしょうか?

public Form1()
{
 InitializeComponent();

 this.BackColor = Color.FromArgb(255,0,255);
 label1.BackColor = Color.FromArgb(255,0,255);

 this.TransparencyKey = Color.FromArgb(255,0,255);
}


なお、フォーム全体を透明にしたいのではありません。文字は不透明に表示したいのです。

よろしくお願い致します。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-02-05 13:52
TransparencyKeyが効かないのは良く分かりませんが、色のalpha値を指定するわけにはいかないんですか?
Color.FromArgb(0,255,0,255)
こんな感じで。
eShin
会議室デビュー日: 2004/02/05
投稿数: 3
投稿日時: 2004-02-05 15:07
情報ありがとうございます。

フォームにalpha値を指定するとエラーが発生するため、ラベルのみに指定してみました。状況は変わらず、クライアント領域は透明でラベルの背景は紫のままでした。。

public Form1()
{
 InitializeComponent();

 this.BackColor = Color.FromArgb(255,0,255);
 label1.BackColor = Color.FromArgb(0,0,0,0); //背景色は 黒かつalpha値を0 = 透明 に指定

 this.TransparencyKey = Color.FromArgb(255,0,255);
}

他の方法はありませんでしょうか..?
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-02-05 16:41
自分の環境(32ビット)で試したら、最初のコードのまま透明になりました・・・・(汗。
グラフィックカードが原因?他の環境ではどうなるか試してみたらどうでしょうか。

また、次のようにしてみたらどうなります?
label1.BackColor = Color.Transparent;
eShin
会議室デビュー日: 2004/02/05
投稿数: 3
投稿日時: 2004-02-05 17:00
情報ありがとうございます。

上のコードのlabel1.BackColorの部分だけnoderaさんの方法に変えてみましたが、状況は変わらずでした。。

VisualStudioのヘルプを探してみると、「モニタの色深度の設定が 24 ビットより大きい場合は、TransparencyKey プロパティの設定に関係なく、フォームの特定の部分が透明にならないという表示上の問題が発生することがあります。この問題を避けるには、コントロール パネルの [画面] で、モニタの色深度を 24 ビット以下に設定してください。このような透明表示を使用するアプリケーションを開発するときは、ユーザーがこの問題を認識するように配慮する必要があります。」という記述がありました。(無責任な解決策だ。。)

引用元:VisualStudioのヘルプ「四角形以外の Windows フォームの作成」


回避策は無いのでしょうか。。。?
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-02-05 17:40
最終的にどのようなアプリケーションを作成したいか分かりませんが、
たとえば文字だけが表示される時計アプリケーションを作りたい場合、
リージョンを使って文字の部分だけをウィンドウ化するという方法もあります。
.NETでリージョンをあまり使ったことがないんで、サンプルを示すことができませんが、
リージョン、regionでMSDN等調べれば情報が出てくると思います。
たくろ
会議室デビュー日: 2009/01/24
投稿数: 1
投稿日時: 2009-01-24 15:07
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
は効果ないでしょうか?
Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2009-01-25 16:50
これのこと?
http://support.microsoft.com/kb/820640/en-us
1

スキルアップ/キャリアアップ(JOB@IT)