DOBON.NETプログラミング道掲示板

ツリー一括表示

Nomalアイコン タブレット等でスワイプによるスクロールを実装 /炎の妖精さん (22/10/13(Thu) 10:06) #35165
Nomalアイコン Re[1]: タブレット等でスワイプによるスクロールを実装 /炎の妖精さん (22/10/13(Thu) 11:16) #35168 解決み!
Nomalアイコン Re[1]: タブレット等でスワイプによるスクロールを実装 /魔界の仮面弁士 (22/10/13(Thu) 11:14) #35167


親記事 / ▼[ 35168 ] ▼[ 35167 ]
■35165 / 親階層)  タブレット等でスワイプによるスクロールを実装
□投稿者/ 炎の妖精さん 一般人(7回)-(2022/10/13(Thu) 10:06:36)
  • アイコン環境/言語:[Windows10(64bit)_VB.NET] 
    分類:[.NET] 

    お世話になっております。

    表題の通り、スワイプでのスクロールを実装したいと考えております。
    Windowsフォーム上に以下のコントロールを配置しました。

    ■FlowLayoutPanel(スクロールを表示してここでスクロールしたい)
    └■UserControl(5*10のボタンが並べられている)
     ├■Button01
     ├■Button02
     …
     ├■Button49
     └■Button50


    なぜこのような配置の仕方をしている理由ですが、
    タブレットの解像度が1920*1280、ボタンや文字もなるべく大きめということもあり、
    5*10のボタンを配置する場合にはタブレットの画面に入りきらない為、スクロールを実装することになりました。

    DataGridViewでは自動でスワイプによるスクロールが出来るのですが、
    上記のような配置の場合ではスクロールが出来ませんでした。
    ※もちろんマウスホイールによるスクロールは可能でした

    処理としてはUserControlのスクロール移動量を取得して
    FlowLayoutPanelにスクロール移動量を付加させるというような処理になるのでしょうか?

    スクロールに関しての処理は初めての為、ご教授いただければ幸いです。
違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 35165 ] / 返信無し
■35168 / 1階層)  Re[1]: タブレット等でスワイプによるスクロールを実装
□投稿者/ 炎の妖精さん 一般人(8回)-(2022/10/13(Thu) 11:16:02)
  • アイコンすみません。解決しました。

    他社サイト様にて
    C#で書かれたコードをVB.NETに書き直し
    一部のコードを直したら想定通りの動作となりました。

    ■Windowsフォームアプリにおけるスワイプによるスクロールについて
     ※URLは長いので省略させていただきます。
解決み!
違反を報告
[ 親 35165 / □ Tree ] 返信 削除キー/

▲[ 35165 ] / 返信無し
■35167 / 1階層)  Re[1]: タブレット等でスワイプによるスクロールを実装
□投稿者/ 魔界の仮面弁士 大御所(1454回)-(2022/10/13(Thu) 11:14:13)
  • アイコン2022/10/13(Thu) 11:18:44 編集(投稿者)

    Windows Touch あるいは スタイラス対応のタブレット デバイスが
    現在手元に無いため、動作を確認せずに回答しています。
    余裕があれば追って確認しますが…とりあえず状況把握として逆質問。


    No35165に返信(炎の妖精さんさんの記事)
    > 上記のような配置の場合ではスクロールが出来ませんでした。
    マウスホイールによる操作の場合、
    「ホバーしたときに非アクティブウィンドウをスクロールする」
    が On / Off の状態で動作が変わるかと思いますが、スワイプの場合、
    上記の設定切替に近い動作にしたいのでしょうか。それともスワイプは
    上記設定によらず、常に同じ動作になって欲しいのでしょうか。
    https://dynabook.com/assistpc/faq/pcdata2/017955.htm


    > Windowsフォーム上に以下のコントロールを配置しました。
    Button, UserControl, FlowLayoutPanel のそれぞれに対して
     ・AutoSize プロパティによって自動変更されるもの
     ・Dock や Anchor などによってリサイズされうるもの
     ・固定サイズで配置されるもの
    などがどうなっているのか定かでは無いので、
    当方で状況を読み切れていない部分があるかもしれませんが:


    今回、FlowLayoutPanel が採用されている理由は何ですか?
    FlowLayoutPanel 内にあるコントロールが UserControl 一つだけなら
    フローレイアウトになることも無さそうなので、素の Panel で良いような。

    (案1) デザイン時にスクロールできない
     Panel1 (AutoScroll = False)
     └UserControl1 (AutoScroll = True , Dock = Fill, Anchor = Top,Left)

    (案2) デザイン時にもスクロール可能だが、カプセル化しにくいかも?
     Panel1 (AutoScroll = True)
     └UserControl1 (AutoScroll = False, Dock = None, Anchor = Top,Left)


    FlowLayoutPanel 版は、Panel 版の 案2 に近い設計なのかと予想していますが、
    上記それぞれを試した時、
     a) マウス(あるいはタッチパッド)によるホイール回転操作
     b) マウスによるパン操作(ホイールを押しながらのドラッグ)あるいは同等のタッチパッド操作
     c) スタイラス(ペン)を画面に押し付けた状態でのスワイプ操作
     d) スタイラスのスクロールボタンを押した状態でのホバー操作
     e) Windows Touch によるスワイプ操作
    の動作に違いが生じるでしょうか。それとも 案1/案2 で変わらないでしょうか。

    a と d は非アクティブ状態でも操作できるのに対して、
    b, c, e はタップ(あるいはクリック)操作が先に入るので、
    常にアクティブウィンドウに対して操作することになるという違いがありそうです。


    ところで、今回のスワイプ操作はどの場所から始める想定でしょうか?
     ア) FlowLayoutPanel のスクロールバー部
     イ) FlowLayoutPanel の余白部(UserControl の外側)
     ウ) UserControl のクライアント領域
     エ) 各ボタンの上
     オ) 上記以外

    フォーカスを受け取れるコントロール、かつ、スクロール可能なコントロールの
    上でスワイプ操作を開始すると、スクロールが発生し無さそうなので
    念のために確認しています。
違反を報告
[ 親 35165 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -