Panel内での自動スクロールを停止
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にしていますが、書き方はお好みで。
この記事へのコメントはこちら