■ 独自スクロールバーを実装するには...
* 以下の関連記事を参照。HScrollBar / VScrollBar ~ 独自スクロールバーの実装 ~
https://blogs.yahoo.co.jp/dk521123/38010582.html
■ 画像にスクロールを付ける
手順
[1] Panelを画像の親コントロールとして配置する + AutoScrollプロパティ : True [2] PictureBoxをPanelの子として配置する + SizeModeプロパティ : AutoSize + 親とドッキングしないこと(★ここでドッキングして、ハマった★) # 以下の関連記事を参照のことPictureBox [11] ~ スクロールバー付きの画像表示を考える ~
https://blogs.yahoo.co.jp/dk521123/38109343.html
参考文献
http://www.atmarkit.co.jp/fdotnet/dotnettips/698scrollpic/scrollpic.htmlhttp://codepanic.itigo.jp/cs/picturebox_scroll.html
■ スクロール位置を制御するには...
* AutoScrollPositionプロパティを使う
サンプル
this.AutoScrollPosition = new Point(-this.AutoScrollPosition.X + 10, -this.AutoScrollPosition.Y + 10);
補足:その他のサンプル
* 以下の関連記事を参照。PictureBox [2] ~ PictureBox を マウスで移動する ~
https://blogs.yahoo.co.jp/dk521123/37861699.html
■ マウスホイルによるスクロールを無効化する
* 通常、スクロール近くでマウスホイルを行えば、スクロールするがそれを無効化する
対応案
[1] マウスホイルイベントを受ける子コントローラに対して、マウスホイールイベントを追加する => 追加方法については、以下の関連記事を参照のこと ★ ただし、この方法では完全には、無効にはならない (例:スクロールバー上でマウスホイールを行った場合)マウスホイールイベントの追加方法
https://blogs.yahoo.co.jp/dk521123/37867491.html
[2] [1] のイベント内で「handledMouseEventArgs.Handled = true;」を行う(以下「サンプル」参照)
サンプル
必要箇所を抜粋public Form1() { InitializeComponent(); pictureBox1.MouseWheel += new MouseEventHandler(OnMouseWheel); } private void OnMouseWheel(object sender, EventArgs e) { var handledMouseEventArgs = e as HandledMouseEventArgs; handledMouseEventArgs.Handled = true; }
参考文献
https://social.msdn.microsoft.com/Forums/en-US/fca391b4-ccbf-4389-9203-8229905308c4/how-to-disable-mouse-wheel-scroll?forum=winforms■ スクロール連動する
* 複数スクロールがあった場合、スクロールバーを動かしたら、 他のスクロールバーも連動して動くようにする
サンプル
private void OnScroll(object sender, ScrollEventArgs scrollEventArgs) { Panel targetPanel = (Panel) sender; int x = targetPanel.HorizontalScroll.Value; int y = targetPanel.VerticalScroll.Value; panel1.AutoScrollPosition = new Point(x, y); panel2.AutoScrollPosition = new Point(x, y); }* プロパティの設定
* Panelを画像の親コントロールとして配置する + AutoScrollプロパティ : True* イベントの設定
* 後は、Panel のプロパティにあるイベント「Scroll」に 上記のメソッド「OnScroll」を設定する。
追記:マウスホイルの対応
以下、コード抜粋public Form1() { InitializeComponent(); //ホイールイベントの追加 this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.OnMouseWheel); this.panel2.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.OnMouseWheel); } private void OnScroll(object sender, MouseEventArgs mouseEventArgs) { Panel targetPanel = (Panel) sender; int x = targetPanel.HorizontalScroll.Value; int y = targetPanel.VerticalScroll.Value; panel1.AutoScrollPosition = new Point(x, y); panel2.AutoScrollPosition = new Point(x, y); }
関連記事
Windows Form
Windows Form ~ 目次 ~https://blogs.yahoo.co.jp/dk521123/8054245.html
HScrollBar / VScrollBar ~ 独自スクロールバーの実装 ~
https://blogs.yahoo.co.jp/dk521123/38010582.html
マウスホイールイベントの追加方法
https://blogs.yahoo.co.jp/dk521123/37867491.html
Windows Form / PictureBox
PictureBox [1] ~画像を表示する~https://blogs.yahoo.co.jp/dk521123/23504075.html
PictureBox [2] ~ PictureBox を マウスで移動する ~
https://blogs.yahoo.co.jp/dk521123/37861699.html
PictureBox [11] ~ スクロールバー付きの画像表示を考える ~
https://blogs.yahoo.co.jp/dk521123/38109343.html