1


0

私が始めようとしていることから始めます。

たとえば、4月1日に左いっぱいまでスクロールすると6月1日に右いっぱいまでスクロールするという範囲でデータがロードされています。

ユーザーは4月1日にスクロールバーを配置し、スクロールバーの左矢印をクリックします。 スクロールバーは3月31日に配置され、データの範囲は3月1日から6月1日までです。

これが私の問題です:

私はScrollイベントハンドラの中で左矢印クリックを扱ってきました(おおよそ以下のように):

private void horizo​​ntalScroll_Scroll(object sender、ScrollEventArgs e){if(LeftArrowClicked()){horizo​​ntalScroll.Maximum = calculateNewMaximum(earliestDate、latestDate); horizo​​ntalScroll.Value = calculateNewPosition(currentDate.AddDays(-1)、earliestDate); }}

デバッガを使用してこのイベントハンドラを離れると、horizo​​ntalScroll.Valueは0になりますが、horizo​​ntalScroll.Maximumは正しい値のままです。

明確化と質問への回答を後で投稿します。

2 Answer


2


+ horizo​​ntal Scroll.Value`の代わりに + e.NewValues`を設定してみてください。 コントロールは独自のロジックを実行するときにこの値を尊重します。


1


これは明らかに、 `+ Scroll `イベントが発生した後に値を設定する ` ScrollableControl `が原因です。 使用しているコントロールを拡張し、 ` OnScroll +`仮想メソッドをオーバーライドしてみてください。

protected override void OnScroll(ScrollEventArgs se)
{
  base.OnScroll(se);

  // Do stuff now
}

'' '' '

Edit

おそらく、スクロールバーのボタンをクリックしても、 `+ Scroll `イベントは発生せず、 ` ValueChanged +`イベントのみが発生することに注意してください。 (ただし、マウスを使うと両方が生成されます。)

'' '' '

もう一度編集

ああ! それをする方法があることを私は知っていました。 `+ horizo​​ntalScroll.Value `を変更する代わりに、 ` ScrollEventArgs `パラメーターで ` NewValue +`を設定する必要があります。 これはうまくいくはずです。

private void horizontalScroll_Scroll(object sender, ScrollEventArgs e)
{
    if (LeftArrowClicked())
    {
        horizontalScroll.Maximum = calculateNewMaximum(earliestDate, latestDate);
        e.NewValue = calculateNewPosition(currentDate.AddDays(-1), earliestDate);
    }
}