- - PR -
Formにグラデーションをかける
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-29 23:10
いつもお世話になります。
VB.NET2005で開発をしています。 Formにグラデーションをかけたく、以下のHPを参考にさせていただきました。 http://dobon.net/vb/dotnet/graphics/lineargradientbrush.html グラデーション自体はかけることに成功したのですが、 FormLoadイベントに記述したところ、うまく作動しなかったたため、 FormPaintイベントに記述しました。 がそうしたところ画面を呼び込むために頻繁にグラデーションをかける処理を 行っているようで、ほかのアプリケーションに切り替えたりすると Paint処理が走ってしまうため、ちかちかしてしまいます。 しかしFormPaintイベントにいれないとうまく動かなかったり そのFormにあるComboボックスを操作したりすると その部分がグラデーション処理されないようです。。。 どのイベント処理に記述するべきなのでしょうか? FormPaintイベントでいいのでしょうか? | ||||
|
投稿日時: 2006-11-29 23:30
再描画が必要な箇所だけ、再描画すればいい。
「2重バッファ」あたりで検索してみるべし。 _________________ | ||||
|
投稿日時: 2006-11-30 00:08
Load イベントでは描画系の処理は行わないでください。 どのみち、再描画が必要である場合は、Paint 系のイベント以外は NG です。 Jitta さんのヒントを頼るのであれば、'ダブル バッファリング' で検索した方が良いかもしれません。 このあたりは、@IT 自体に記事がありそうですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-11-30 12:25
検索ワードに、オフスクリーン描画も加えてあげてください。
| ||||
|
投稿日時: 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が足りないと思い、試してみたのですが そのようなイベントはないとおこられてしまいました。 対応方法が間違っていましたでしょうか? | ||||
|
投稿日時: 2006-11-30 21:09
ダブル バッファリングの適用についてですが、
2005(.NET Framework 2.0)であれば、DoubleBuffered プロパティで設定できます。 プロパティ ウィンドウに表示されていると思います。 それと、SetStyle メソッドはアクセス修飾子がProtectedなので、 継承先(派生先)からしかアクセスできません。 |
1