概要
最終ページの次ページが先頭ページに、または先頭ページの前ページが最終ページとなるようなページ番号がループする場合に関してのページ番号の計算方法の覚え書き
var nextPage = (currentPage + pages + (step % pages)) % pages // (1)
ここで
- nextPage: 次のページ番号
- currentPage: 現在のページ番号
- pages: 総ページ数
- step: 進める(戻す)ページ数
説明
stepの絶対値がpages以下であれば、
var nextPage = (currentPage + pages + step) % pages // (2)
でも計算できますが、
currentPage + pages < Math.Abs(step) // ただしstep < 0
の場合に、nextPageがマイナスとなってしまうため、(1)のような面倒な計算式となってます。
逆に、stepの絶対値、ページ数超えねーよというのであれば、(2)で十分です。
追記 (2012/12/12)
C#のプロパティ機構を通して変更する場合、
++hoge.Page;
プロパティへは加算された値が渡されるため、(3)のようにすればよいと思います。
var nextPage = (pages + (value % pages)) % pages // (3)
ここで
- value :プロパティ機構を通して渡された値