- PR -

Formをリサイズしても水平スクロールバーが再描画されない

1
投稿者投稿内容
popo
会議室デビュー日: 2002/12/22
投稿数: 4
投稿日時: 2005-01-26 20:47
はじめての投稿になります。宜しく御願いします。

Formを作成しAutoScrollをtrueにします。
Formにbuttonを2つ横に水平に置きます。

FormにResizeイベントを追加し、buttonの大きさをFormの横の大きさの半分の大きさに変更するようにしました。
そうしたところ、水平スクロールバーが変更前のFormの横の大きさのままとなってしまい、再描画されません。

再描画させる為にResizeイベント内でthis.Visibleをfalseにしてすぐにtrueに設定すると水平スクロールバーが再描画されるようになりましたが、これだと一瞬ちらついてしまうため、みにくくなってしまいます。

Formの大きさを変更した時にちらつくことなく水平スクロールバーを再描画する方法は他に無いでしょうか?

Resizeイベントのコードは以下のようにしております。

button1.Width = this.Width/2;
button1.Left = 0;
button2.Width = this.Width/2;
button2.Left = button1.Width;
this.Visible = false;
this.Visible = true;

ちなみにthis.Refresh()をしても水平スクロールバーの再描画は行われませんでした。
また、this.Hide()/this.Show()をしてみてもちらついてしまいます。
宜しく御願いいたします。


甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-01-26 21:54
ResumeLayout(true);を呼び出して強制的にレイアウト計算処理を行わせると期待した動作をしませんか?
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
@echo
会議室デビュー日: 2005/01/19
投稿数: 18
投稿日時: 2005-01-26 21:56
Layout イベントで処理する...が正解でしょうか。
Resize イベントで処理するなら PerformLayout() を呼び出す手もありますが。
popo
会議室デビュー日: 2002/12/22
投稿数: 4
投稿日時: 2005-01-27 09:08
返答ありがとうございます。
ResumeLayout(true)では水平スクロールバーの再描画は行われませんでした。
Layoutイベントで処理する事で再描画が行われるようになりました。
また、Resizeイベント内でPerformLayout()を呼び出す事でもOKでした。
いろいろと知らないイベントやMethodの存在を知ることが出来て大変勉強になりました。
ありがとうございました。

1

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