- - PR -
コントロールが消えない
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-07 14:25
ダッチです。
<環境> Windows XP ProfessionalSP2 VB 2005 ビデオカード GeForce FX 5700 <内容> フォーム内のパネルにコンテナ化されているコントロールが 見た目上、消えない現象が発生しております。 .NET のバグなのか ビデオカードが原因なのかがわからずにいます。 消えないコントロールが 通常の動きどおりに消える方法をお聞きしたく質問いたしました。 <現象再現手順> 1.適当なプロジェクトを作成します。 2.Form1 に Panel を追加します。 3.追加した Panel に Button を追加します。(コンテナ化します) 4.Form1 に Timer を追加します。 5.Form をプロジェクトに追加します。 6.下記のコードを Form1 に追加します。
7.プログラムを実行し、ボタンを選択します。 3秒後に Panel と Button が消えるはずですが、Form2 を動かしてみると 動かしたところにコントロールが消えていないかのように見えてしまっています。 よろしくお願いいたします。 <補足> この現象は Panel や GroupBox などコンテナ化できるコントロールで発生するのを確認しております。 また、以前にも Form の TransparencyKey と Opacity を設定したら OS が数秒固まってしまう件がありました。 そのときはビデオカードが原因だったので、もしかしたら今回もビデオカードが原因なのでしょうか。 スクロールが表示されるとOSが固まってしまう。 | ||||||||||||||||
|
投稿日時: 2006-05-07 14:59
再現しました...... が、これは OS 側の問題だと思います。 隠された部分は描画する必要がないと判断しているのでしょう。
このように強制描画しましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-05-07 15:32
誤解されかねないので補足です。
これは、隠れている部分が 即座に更新されない ことについてだけの説明でした。 ここを補うことで解決策を出してはいますが、実際に問題となっているのはここではないですね。(;^-^) OS の都合で考えると 隠れている部分ですから、本来は即座に更新する必要はないです。 描画が 必要になったタイミング で更新すれば良いわけです。(通常、これが自然です) この タイミング は、今回で言えば Form2 をどかして Button1 の描画が必要になった時ですが、 今回、このタイミングで描画されていないのが、直接的な原因です。 その原因となっているのが、TransparencyKey プロパティというわけです。 # 実際、Button1 に Form2 を '半分だけ' 被せて 3 秒間待ってみると良くわかります。 # 面白いことに、半分だけ描画され、半分だけ描画されないままになっています。 そういうわけで、
コンテナ内のコントロールであるかどうかは、関係ないです。 以下のように変更して確認してみたところ、同様の現象を確認しました。
以上、拙い補足でした。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-05-07 16:02
回答ありがとうございます。
ご指示いただいた下記のコードで現象を回避することができました。 大変ありがとうございました。
本当ですね。 コンテナ化については関係ありませんでした。 勘違いをしておりました。 ---------------------------------------------------------------------------- ひとつ疑問が残るのですが。
ここまでは理解できます。
なぜ TransparencyKey プロパティ を設定することで 描画がされなくなってしまったのでしょうか。 TransparencyKey プロパティ のヘルプを見る限りでは、 とくに描画がされなくなりますなどとは記載されておりません。 こちらについての回答もよろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-05-07 16:11
ダッチさんのご想像の通り、不具合の可能性が高いです。 (だから、ドキュメントに記載されない...) 透明化したことによる描画関係の不具合は、過去にも何度かありました。 「再描画が必要な時に描画されない」という類は、既に報告されていたかと思います。 多分、直らないんでしょうね。 根深そうなので、インシデントを発行する気にもなれません。(;~_~) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-05-07 17:09
回答ありがとうございます。
はぁ〜、そうなんですか。 透明化は今の時代でも難しいんでしょうね。 透明化の技術は グラフィカルなアプリケーションを作成するには必須なんですけど、 仕方ないですね。 次の OS Vista に期待して待つことにします。 でも、今回の現象が回避できて感謝しております。 ありがとうございました。 # なんか私がやりたいと思ったことに対して、 # .NET のバグとか OS のバグとかに結構出会っている感じです。 # 運が悪いのかなぁ | ||||||||||||||||
|
投稿日時: 2006-05-07 17:11
え?必須なの?僕は使ったことないぜよ? それにしてもWindowsには困ったものだ・・ _________________ 質問する前にググレカス |
1