DOBON.NET DOBON.NETプログラミング掲示板過去ログ

初期表示時のAutoScrollの位置指定

環境/言語:[Win2000/C#/Framework 1.1]
分類:[.NET]

.NET2003 C#でWindowsアプリを開発しております。
MDIの子画面表示時にスクロールを左上へ移動させたいのですがうまくいきません。
子フォームの初期表示時に画像を複数表示させているのですが、スクロールが右端に来てしまいます。
フォームロードのイベントで、AutoScrollPositionを(0,0)に指定してみても反映されていないようです。
実現方法をご教授願います。
要は、MDI 親フォームが持つスクロールバーを先頭に移動させたい、ってことですね?
MDI 親フォームのスクロールバーは、Form.AutoScroll を使っているわけではありません。
MdiContainer を true にすると、自動的に内部で MdiClient コントロールが作成されて MDI 親フォームの Controls に追加されます(MDI 子フォームはこの MdiClient コントロールの子コントロールという形になっています)。スクロールバーはこの MdiClient コントロールのものです。
MdiClient クラスは MSDN にも載っていますが(VS2002/2003 のドキュメントでは詳細は触れられていませんが、VS2005 のドキュメントではしっかりした記述があります)、このクラス自体は ScrollableControl から派生しているわけではないため、AutoScrollPosition プロパティも持っておらず、直接にはスクロールを操作することはできません。そのため、WM_VSCROLL や WM_HSCROLL などを使う必要があります。
と取りあえず概念をお話ししましたが、実装方法はお分かりでしょうか。
■No15626に返信(Hongliangさんの記事)
> 要は、MDI 親フォームが持つスクロールバーを先頭に移動させたい、ってことですね?

すいません、説明が下手だったようで。
子フォームのスクロール制御です。(子フォームのAutoScrollをtrueに指定)
初期表示以降はAutoScrollPositionにて制御出来るのですが、フォームロード時には出来ないのです。
何しろ初心者なのもので根本的に勘違いしている可能性もあるのですが・・。
> すいません、説明が下手だったようで。
> 子フォームのスクロール制御です。(子フォームのAutoScrollをtrueに指定)
> 初期表示以降はAutoScrollPositionにて制御出来るのですが、フォームロード時には出来ないのです。
ああ、勘違いすいませんでした。

んー、しかし勝手に AutoScrollPosition が変更されたり Load での設定が無視されたりと言うことはないはずなのですが。
どこか他に子フォームの AutoScrollPosition を操作しているところはありませんか?
ところで、この Load は親フォームのですか? それなら子フォームの Load イベントに変更したらどうなるでしょうか。
■No15633に返信(Hongliangさんの記事)
> んー、しかし勝手に AutoScrollPosition が変更されたり Load での設定が無視されたりと言うことはないはずなのですが。
> どこか他に子フォームの AutoScrollPosition を操作しているところはありませんか?
> ところで、この Load は親フォームのですか? それなら子フォームの Load イベントに変更したらどうなるでしょうか。

子フォームのLoadイベントでやってます。
@起動時に親フォームのロードで子フォームを1個作成(子フォーム.Show())
A子フォームのロードでサイズ以上に画像用のコントロールを配置
子フォームのLoadメソッド中はAutoScrollPositionの座標は(0,0)になっているようなんですが、最終的にはスクロールが先頭にきてません・・。

DOBON.NET | プログラミング道 | プログラミング掲示板