お問い合わせ

tel:0570-046-503

営業時間 10:00~17:00(定休日:土日祝日)

Panel内での自動スクロールを停止

   2015/08/04

Windows Formアプリケーションで、Panel内に複数のオブジェクトを配置して

Panelの領域をオーバーしたら自動的にスクロールする仕組みはよくあります。

Panelのプロパティ AutoScrollをOnにするだけです。


ただし、AutoScrollをOnにしてしまうと、Panel内のコントロールがActiveになった際に

自動的にそのコントロールの位置までスクロールされてしまうという欠点があります。


このような動きを制限するためには、もともとのPanelのスクロール処理をオーバーライド

してやる必要があります。


ここでは、Panelコントロールを継承したカスタムコントロールを作成しています。


C#でのサンプルは以下のとおりです。

    public class CPanel:System.Windows.Forms.Panel
    {
        /// <summary>
        /// 自動的にパネル内のオブジェクト位置にスクロールするかどうか
        /// </summary>
        [DefaultValue(false)]
        public bool IsAutoScroll{get;set;}

        /// <summary>
        /// コントロール位置に自動的にスクロールする処理をオーバーライド
        /// </summary>
        /// <param name="c">現在有効なコントロール</param>
        /// <returns>スクロール位置</returns>
        protected override Point ScrollToControl(Control c)
        {
            if (this.IsAutoScroll)
            {
                return base.ScrollToControl(c);
            }
            else
            {
                return new Point(-this.HorizontalScroll.Value, -this.VerticalScroll.Value);
            }
        }
    }

状況に応じてIsAutoScrollの値を操作すると良いと思います。

デフォルト値はアノテーションを使ってfalseにしていますが、書き方はお好みで。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)