C# ReoGridの、スクロールを同期したい、セルがない位置にスクロール出来ないようにしたい

タグの編集
投稿者 えんぴー  (社会人) 投稿日時 2022/10/27 10:35:49
お世話になります。

WinformのC#で作成中です。
https://reogrid.net/jp/document/worksheet/

ReoGridを利用し、スケジュール帳みたいなものを作ろうとしています。
ReoGrid1、ReoGrid2を横並びに配置して設置しています。

            var sheet = reoGridControl1.CurrentWorksheet;
            var CalSheet = reoGridControl2.CurrentWorksheet;
            sheet.Resize(10, 10);
            CalSheet.Resize(10, 182);

上記のようにシートには10行まで表示させるようにしているのですが、
シート上でホイールをくるくる回したら、セルが無いところまでスクロール出来てしまいます。
今はとりあえず10行としていますが、動的に100行とかに増やしていく可能性があります。

画面上にセルが無いところにはスクロールさせたくないのですが、
どのように設定したらできるのでしょうか?
(ShowScrollEndSpacingというのが怪しいと思っているのですが、
 TrueにしてもFalseにしても変化は見当たりませんでした)

また、ReoGrid1とReoGrid2の縦スクロールを同期させたいです。
スクロール同期は何となくわかるかもしれないのですが、
セルが無い位置にホイールスクロールが出来ないようにする手順は分からないため
わかれば教えてください。よろしくお願いいたします。
投稿者 (削除されました)  () 投稿日時 2022/10/27 13:51:35
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/10/27 14:02:47
お使いのバージョンは、nuget で公開されている v3.0.0 (2021/05/05) のアセンブリですか?
それとも、それ以降の修正を含めたソースからビルドした物でしょうか。
https://www.nuget.org/packages/unvell.ReoGrid.dll
https://github.com/unvell/ReoGrid/tree/v3.0.0
https://github.com/unvell/ReoGrid.git


v3.0 から、スクロール量の丸め処理のロジックが変わっていて、
v2.2 とは動作が違っているところがあるんですよね。

もしも今回の件が #410 (2021/05/11) で報告されているものに該当するのなら、
2021/05/29 に datadiode さんが修正パッチを作っていらしたので、
もしかしたらそれが使えるかもしれません。 ※当方は未検証
https://github.com/unvell/ReoGrid/issues/410
https://github.com/datadiode/ReoGrid/releases/tag/3.0.0-datadiode-62-g70c0167

今の所プルリクはされていないようで、現時点では本家のブランチにも
マージはされていないようですが、試してみるのも良いかもしれません。


スクロール周りに限らず、幾つかの障害については既に報告されていたり、
対策が提案されているものもあるので、GitHub の Issues を覗いてみる事をお奨めします。

たとえば #177 (2018/10/06)に報告されているスクロール障害については
現在も継続中のようですが、jingwood さん自身が、4ヶ月前(2022/06/28)に
master ブランチに暫定対応の修正を加えられたようです。
https://github.com/unvell/ReoGrid/issues/177
投稿者 えんぴー  (社会人) 投稿日時 2022/10/27 14:18:59
魔界の仮面弁士様

確認ありがとうございます。

nugetで公開されているV3.0.0を利用しています。

表示されているスクロールバーをクリックしてドラッグ移動する分には
余計なスペースは表示されません。

しかし、マウスのホイールを使って下にスクロールすると
真っ白な画面が表示されます。
(少しとかではなく、全部真っ白みたいな感じです)

行数を10行にプログラムで変更していて、
スクロールもギリギリしなくてOKレベルだからでしょうかね……。

GitHub、見てみます!ありがとうございます!
アカウントを持っていないので、
投稿する場合はアカウント作成からですね。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/10/27 15:24:54
> スクロール同期は何となくわかるかもしれないのですが、
検証はしていませんが、なんとなく WorksheetScrolled イベントと
ScrollCurrentWorksheet メソッドが使えそうですね。
互いをスクロールしあって再帰呼び出しにならないように注意しましょう。
https://github.com/unvell/ReoGrid/issues/114

https://reogrid.net/download/ にあるデモプログラム(v2.x) のものでは
[Features] - [Synchronize Scroll] (\Features\SynchronizeScrollDemo.cs ) が
該当しそうですが、v3.0 版のイベント引数には x.OffsetX は無かったはずなので、
GitHub にある最新のデモを確認した方が良いとは思います。
https://github.com/unvell/ReoGrid/blob/master/DemoJP/Workbook/SynchronizeScrollDemo.cs


> ReoGrid1とReoGrid2の縦スクロールを同期させたいです。

2 つのコントロールで同期させる方法の場合、
一方だけが Zoom されていた場合や、
それぞれでシートの総行数が異なっていた場合、
あるいはアウトラインの折り畳みや、
行数は同じでも高さの違う行の混在などの扱いが悩ましいですね。

シチュエーションとしてはかなり限定されますが、
もしも水平スクロールが不要で、かつ、両者の行の高さなども同一な場合には、
単一シートにして、FreezeArea で分けるという選択肢もあるかもしれません。
https://reogrid.net/jp/document/worksheet/freeze/
投稿者 えんぴー  (社会人) 投稿日時 2022/10/28 09:49:43
 魔界の仮面弁士様

たびたび回答いただきありがとうございます!
教えていただいたデモ版で、スクロール同期は問題なく利用できました。

ただ、ホイールでスクロールした場合に
空白場所に移動してしまうのはどうにもならなそうです。
現在のスクロール位置取得も中々難しそうなため
とりあえずホイールスクロールを禁止にしようと思います。

行の高さは同じにしますが、Grid1とGrid2でそれぞれ枠固定したい場合があるため
とりあえず縦スクロールが出来たので良しとします!

ありがとうございました、また何かありましたら相談させてください。
本当にいろいろと助かりました、ありがとうございました!