- PR -

Formにグラデーションをかける

1
投稿者投稿内容
BB
ベテラン
会議室デビュー日: 2005/05/08
投稿数: 52
投稿日時: 2006-11-29 23:10
いつもお世話になります。
VB.NET2005で開発をしています。

Formにグラデーションをかけたく、以下のHPを参考にさせていただきました。
http://dobon.net/vb/dotnet/graphics/lineargradientbrush.html

グラデーション自体はかけることに成功したのですが、
FormLoadイベントに記述したところ、うまく作動しなかったたため、
FormPaintイベントに記述しました。

がそうしたところ画面を呼び込むために頻繁にグラデーションをかける処理を
行っているようで、ほかのアプリケーションに切り替えたりすると
Paint処理が走ってしまうため、ちかちかしてしまいます。

しかしFormPaintイベントにいれないとうまく動かなかったり 
そのFormにあるComboボックスを操作したりすると
その部分がグラデーション処理されないようです。。。

どのイベント処理に記述するべきなのでしょうか?
FormPaintイベントでいいのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-11-29 23:30
再描画が必要な箇所だけ、再描画すればいい。
「2重バッファ」あたりで検索してみるべし。
_________________
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-30 00:08
引用:

BBさんの書き込み (2006-11-29 23:10) より:

FormLoadイベントに記述したところ、うまく作動しなかったたため、FormPaintイベントに記述しました。


Load イベントでは描画系の処理は行わないでください。
どのみち、再描画が必要である場合は、Paint 系のイベント以外は NG です。

Jitta さんのヒントを頼るのであれば、'ダブル バッファリング' で検索した方が良いかもしれません。
このあたりは、@IT 自体に記事がありそうですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-11-30 12:25
検索ワードに、オフスクリーン描画も加えてあげてください。
BB
ベテラン
会議室デビュー日: 2005/05/08
投稿数: 52
投稿日時: 2006-11-30 20:32
アドバイスありがとうございます。

Form Loadに
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
を追加し

Paintにて
 Form上のPanelに対してグラデーションをかけるようにしたのですが、
 やはり再描画がかかってチラツイテしまいます。

Panelに対してSetStyleが足りないと思い、試してみたのですが
そのようなイベントはないとおこられてしまいました。


対応方法が間違っていましたでしょうか?
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-11-30 21:09
ダブル バッファリングの適用についてですが、
2005(.NET Framework 2.0)であれば、DoubleBuffered プロパティで設定できます。
プロパティ ウィンドウに表示されていると思います。

それと、SetStyle メソッドはアクセス修飾子がProtectedなので、
継承先(派生先)からしかアクセスできません。
1

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