C#_スクロールバーの連動

Panel 1 ~ 4 のどれか一つの Panel のスクロールバーを動かしたら、
他のスクロールバーも連動して動くようにする。

f:id:koshinRan:20170611194121j:plain

Panel 1 ~ 4 のプロパティにあるイベントのアクション「Scroll」で
スクロールされたら呼ばれるメソッド名を入力。
下では panel_Scroll としている。

f:id:koshinRan:20170611191530j:plain

 

ソース

        private void panel_Scroll(object sender, ScrollEventArgs e)
        {
            Panel getPanelScroll = (Panel)sender;

            int x = getPanelScroll.HorizontalScroll.Value;
            int y = getPanelScroll.VerticalScroll.Value;

            panel1.AutoScrollPosition = new Point(x, y);
            panel2.AutoScrollPosition = new Point(x, y);
            panel3.AutoScrollPosition = new Point(x, y);
            panel4.AutoScrollPosition = new Point(x, y);
        }

尚、同じメソッドを呼び出したかったため、下記のソースでは実現できなかった。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1363602278

 

object 型の sender 引数

発生元のオブジェクトが入っている。
(ボタンをクリックしたなら、ボタンの情報)
中身を見ると、
Anchor や AutoScroll、Dock や Location などなど。

ex) では、発生元オブジェクトは Panel なので、
Panel に変換して、各情報を取得する必要がある。
sender.HorizontalScroll.Value;
の場合は、「HorizontalScroll の定義が含まれてないよ」
と怒られる。

 

ScrollEventArgs 型の e 引数

イベント情報が入っている。
スクロールバーを動かす前の位置や、動かした現在の位置などが格納。

イベントごとによって型が異なる。

 

 こちらから参照。

https://msdn.microsoft.com/ja-jp/library/system.windows.forms.scrollablecontrol.autoscrollposition(v=vs.110).aspx
https://dobon.net/vb/dotnet/form/autoscrollposition.html
http://blogs.wankuma.com/mrt/archive/2008/05/27/139640.aspx
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1357258528

 

以上。