WinFormsでスクロール処理を行うと言うと、ScrollableControlの派生クラスを作ってAutoScrollMinSizeでコンテンツのサイズを指定するのが定石だと思うのですが、このAutoScrollMinSizeが上手いこと反映されない事がたまにあります。

以下、無理矢理再現させたコードです。

namespace ScrollTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnSizeChanged(EventArgs e)
        {
            base.OnSizeChanged(e);

            if (ClientSize == Size.Empty)
            {
                AutoScrollMinSize = new Size(8000, 8000);
            }
            else
            {
                AutoScrollMinSize = new Size(10, 10);
            }
            Debug.WriteLine("AutoScrollMinSize= {0}", AutoScrollMinSize);
        }
    }
}

見たとおりですがフォームを最小化した瞬間に、AutoScrollMinSizeを{8000, 8000}にし、元のサイズに戻したときには{10, 10}に設定します。
実行して最小化→元のサイズに戻すと、AutoScrollMinSizeが{8000, 8000}だった頃のスクロールバー状態のままになっています。

Edge2

この条件だけでしたら、ClientSize == Size.EmptyのときにはAutoScrollMinSizeを変更しない事で回避できますが、他にも何パターンか有るような気がします。
この症状について何か情報をお持ちの方がいらっしゃいましたらご連絡ください。

記事検索

アーカイブ