- PR -

コントロールの背景を透明にする方法

投稿者投稿内容
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-10-10 11:01
ジブです。

こんどこそ、解決しました。

ControlのRegionを設定することでOKでした。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2005-10-10 15:28
引用:

ジブさんの書き込み (2005-10-10 11:01) より:
ジブです。

こんどこそ、解決しました。

ControlのRegionを設定することでOKでした。



解決しましたか!?

UserControl のコンストラクタに、
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
を入れてはと思ったのですが...
_________________
IEEE-CSDP 2004-2007
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-10-10 17:10
iStationさん、ありがとうございます。

引用:

UserControl のコンストラクタに、
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
を入れてはと思ったのですが...


やってみましたが、コンテナの色で塗られていました。
どうやらWindowsでいうところのTransparentというのは、
コンテナの色(絵?)を塗るという意味みたいですね。
描画領域をビットマップで保存して書いてたりするのかも。

Regionで領域を設定する以外にないみたいに思えます。

最近はRegion外でもマウスイベントを拾えるんでしたよね?

とりあえずなんとかなりそうです。

ありがとうございました。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2005-10-10 18:31
引用:

ジブさんの書き込み (2005-10-10 17:10) より:
iStationさん、ありがとうございます。

引用:

UserControl のコンストラクタに、
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
を入れてはと思ったのですが...


やってみましたが、コンテナの色で塗られていました。
どうやらWindowsでいうところのTransparentというのは、
コンテナの色(絵?)を塗るという意味みたいですね。
描画領域をビットマップで保存して書いてたりするのかも。

Regionで領域を設定する以外にないみたいに思えます。

最近はRegion外でもマウスイベントを拾えるんでしたよね?

とりあえずなんとかなりそうです。

ありがとうございました。


私の理解では、
「Labelの背景色をTransparentにして、Regionで領域サイズを指定した」と読んだのですが、
「Region外でもマウスイベントを拾う...」がなぜ必要なのかわからないので、
参考に教えてください。
_________________
IEEE-CSDP 2004-2007
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-10-10 19:42
引用:

私の理解では、
「Labelの背景色をTransparentにして、Regionで領域サイズを指定した」と読んだのですが、



ごめんなさい。説明不足でした。

Regionを設定するということで、すでにLabelである必要がなくなったので
UserControl に戻していました。
RegionはControlから派生しているので、要は何でもいいわけです。

なぜUserControl なのかというと、
ただ単にソリューションエクスプローラのアイコンが違うからだけです。


それで、UserControl のコンストラクタに、
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
を設定してみたのですが先ほどの報告のとおりでした。

引用:

「Region外でもマウスイベントを拾う...」がなぜ必要なのかわからないので、
参考に教えてください。



あ、蛇足を書いてしまいました。

Regionを指定してしまうと厳密になってしまうので
ちょっと数ポイントほどずれたんだけど、周りに他にコントロールもないし
よっしゃ、うけとったれ。みたいなことができなくなるというだけです。

ちゃんとまじめにクリックしてくださいね。。。で、済むんで特に問題ありません。

ちょっとたとえ話が上手でないかもしれません。

今回の件とは別なんですけど、どこかのリストボックスだったかなんだったか忘れましたけど
確かに自分の領域は文字の範囲なんですけど
その横の広大な領域のクリックは受け付けてくれないみたいなことがありました。
(背景色とか以前の問題ですし、なんかプロパティがあるんでしょうが。。。)

どうも、私の感覚としては、描画エリアとマウスへ反応するエリアって微妙に違うんでないかな
という意識があります。

1ポイントの点とか線をクリックするのって相当苦労しますよね。
若干バッファが必要だったりしますよね。

そういう作りをしていたので、どうもコントロールの流儀になじめていないだけだと思います。

いろいろ、お騒がせしてすみませんでした。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2005-10-10 20:38
引用:

ジブさんの書き込み (2005-10-10 19:42) より:
...

ごめんなさい。説明不足でした。

Regionを設定するということで、すでにLabelである必要がなくなったので
UserControl に戻していました。
RegionはControlから派生しているので、要は何でもいいわけです。

なぜUserControl なのかというと、
ただ単にソリューションエクスプローラのアイコンが違うからだけです。

それで、UserControl のコンストラクタに、
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
を設定してみたのですが先ほどの報告のとおりでした。
...


UserControl の Region の設定で、表題の「コントロールの背景を透明にする」
要件は満足出来たのでしょうか?
この場合は、UserControlの背景を透明にしたいということですか?
ごめんなさい、参考のためもう少し教えてください。

_________________
IEEE-CSDP 2004-2007
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-10-19 22:00
iStationさん。お返事が遅くなりました。

引用:

UserControl の Region の設定で、表題の「コントロールの背景を透明にする」
要件は満足出来たのでしょうか?



するどいご質問です。そもそもの要件は結局未解決で、別な方法でしのいだというのが正直なところです。
どうやら「コントロールの背景を透明にする」方法は
UIを持たないコントロール?から派生させて、自分で書くより方法がないように思えています。

OnPaint関係をすべて止めても、内部でなにかしら描画している部分があるように思えます。

まったく別件ですが、OwnerDrawしているListBoxのちらつきが気になって
なんとかDoubleBufferを実現しようとしたのですが、
どこかのタイミングでListBox自体が書き込みを行っているらしくうまくいきませんでした。
とりあえずInvalidateするエリアを直前にDrawItem(だっけ)したboundsで設定して逃げていますが
時間があったら一から自分で書いたほうがすっきりするように思えています。

スケルトン的な基本にできる軽い軽いクラスを探すべきなのでしょうが
なかなかあわただしくて想うにまかせないまま日々を送っています。

一段落したら(するのだろうか?).Net Framework をじっくり眺め回してみたいと考えています。

ありがとうございました。
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-10-19 22:15
そうそう、ちょっとずれますが
FormだとTransparencykeyとかのすごい機能があったりします。

どうも私の「透明」というイメージと違っていたりします。

何も書かなければ透明なはずなんだけど。。。
そういう感覚がWindows的でないのかもしれません。

蛇足でした。失礼しました。

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