Excelの「無限の」スクロール可能性に似た何かを実装しようとしています。ユーザがドキュメントの「ボトム」までスクロールできること、スクロールバーをスクロールバーまたはスクロールバーのいずれかを使用してスクロールしたままにすると、空の行がさらに生成されます。私はこれが主に働いています(マウススクロールホイールを使用すると完全に動作します)。私はSmallIncrement機能に問題があります。つまり、ユーザーがスクロールバーの下向きの矢印をクリックすると、スクロールバーのスクロール可能な範囲の下部にあるにもかかわらず、scrollbar.SmallChangeによって下に移動する必要があります。ScrollBarの値が正しく設定されていません
ここは(scrollBar_Scrollのハンドラで)私のコードです:
int difference = e.NewValue - e.OldValue;
if (e.Type == ScrollEventType.SmallIncrement)
{
if (difference != scrollBar.SmallChange)
{
int increase = (scrollBar.SmallChange - difference);
scrollBar.Maximum += increase;
scrollBar.Value += increase;
}
}
は、デバッガでそれを見ると、これは私が期待するとおりに値を設定します。しかし、関数が終了した後に何か(何が確実でないか)が発生し、scrollBar.Valueが元の値に1を加えた値に戻されます。私が下向きの矢印を押し続けると、ほとんどの場合正しく動作します。ボタンが離されるとまだ少し上にジャンプします。
これを引き起こしている可能性があり、それを修正する方法はありますか?
乾杯!
編集:ここにスクロールホイールコードがあります。それはとても似ているので、なぜそれが動作していないのか混乱しています。これは収納パネルのMouseWheel
イベントハンドラにあります。
int desiredValue = scrollBar.Value - e.Delta;
scrollBar.MaximumValue = (Math.Max(normalBottom, desiredValue + scrollBar.LargeChange));
scrollBar.Value = Math.Max(0, desiredValue);
normalBottom
スクロールバーのエンディング「有限」を覚える変数である - Excelでは、これは最低のユーザーが入力したデータ、または、画面の高さのどちらかだろう。したがって、通常はこの値を超えてスクロールします(負にならないでください)。
なぜこの比較を使用していますか:if(difference!= scrollBar.SmallChange)?どのような目的のために? –
違い!= SmallChangeの場合は、スクロール可能な範囲の下側をヒットする必要があります。 – Smashery