スマートフォンのホームページの様に、
スワイプ(マウスのドラッグ)で画面を切り替える事が可能か知りたいです。
可能であれば、実現方法について教えて欲しいです。
スワイプと一緒にPanel1が移動し、
画面のサイズの半分以上のスワイプでPanel2に切替。
半分未満のスワイプの場合は、Panel1のままにしたい。
Windows10
Visual Studio 2019
Windowsフォームアプリ
試した事の追記。
Panel1の中に3つのパネルを配置。(Panel1から4の幅は同じで、panel1だけ少し高い)
Panel1をクリックして、離した際の場所によって、スクロールの場所を変更する様にしました。
やれていない事、知りたい事
1)スクロールバーを表示しない様にしたい。
2)HorizontalScroll.Valueの値を2行入れないと値が更新されない。
label2、3のtextを変更している部分で、1行の時では、label2、3の内容が異なる。button1の部分も1行だけだと、スクロールバーのカーソルの位置が動かない。
C#
1 private int _PreviousX; 2 private int _PreviousMem; 3 private int _ScrollMem; 4 5 public Form1() 6 { 7 InitializeComponent(); 8 panel1.HorizontalScroll.Minimum = 0; 9 panel1.HorizontalScroll.Maximum = panel1.Width * 3; 10 } 11 12 private void panel1_MouseDown(object sender, MouseEventArgs e) 13 { 14 _ScrollMem = panel1.HorizontalScroll.Value; 15 panel1.Capture = true; 16 _PreviousX = panel1.PointToScreen(e.Location).X; 17 _PreviousMem = _PreviousX; 18 19 label1.Text = System.Convert.ToString(_ScrollMem); 20 } 21 22 private void panel1_MouseMove(object sender, MouseEventArgs e) 23 { 24 int dragPos; 25 26 27 if (panel1.Capture) 28 { 29 // ドラッグ中 30 var x = panel1.PointToScreen(e.Location).X; 31 dragPos = Math.Min( 32 Math.Max( 33 panel1.HorizontalScroll.Minimum, 34 panel1.HorizontalScroll.Value + _PreviousX - x), 35 panel1.HorizontalScroll.Maximum); 36 37 panel1.HorizontalScroll.Value = dragPos; 38 panel1.HorizontalScroll.Value = dragPos; 39 _PreviousX = x; 40 } 41 } 42 43 private void panel1_MouseUp(object sender, MouseEventArgs e) 44 { 45 int mouseValue; 46 int dispPos; 47 48 var xx = panel1.PointToScreen(e.Location).X; 49 mouseValue = _PreviousMem - xx; 50 51 if (Math.Abs(mouseValue) < (panel1.Width / 2)) 52 { 53 dispPos = _ScrollMem; // 移動量が半分以下の場合は元の位置 54 } 55 else if (mouseValue < 0) 56 { 57 dispPos = _ScrollMem - panel1.Width; 58 } 59 else 60 { 61 dispPos = _ScrollMem + panel1.Width; 62 } 63 64 dispPos = Math.Min( 65 Math.Max( 66 panel1.HorizontalScroll.Minimum,dispPos),panel1.HorizontalScroll.Maximum); 67 68 panel1.HorizontalScroll.Value = dispPos; 69 panel1.HorizontalScroll.Value = dispPos; 70 71 label2.Text = System.Convert.ToString(dispPos); 72 label3.Text = System.Convert.ToString(panel1.HorizontalScroll.Value); 73 74 panel1.Capture = false; 75 76 } 77 78 private void button1_Click(object sender, EventArgs e) 79 { 80 panel1.HorizontalScroll.Value = panel1.Width * 1; 81 panel1.HorizontalScroll.Value = panel1.Width * 1; 82 } 83 84 private void button2_Click(object sender, EventArgs e) 85 { 86 panel1.HorizontalScroll.Value = panel1.Width * 2; 87 panel1.HorizontalScroll.Value = panel1.Width * 2; 88 } 89 }
回答2件
あなたの回答
tips
プレビュー