【问题标题】:HScrollBar keeps accumulating value after a reset of its valueHScrollBar 在重置其值后继续累积值
【发布时间】:2014-07-31 15:35:10
【问题描述】:

假设您有一个 HScrollBar。还可以说您可能想要取消滚动并返回到以前的值。例如,您的滚动条值为 3。现在用户单击滚动条来推进一个值(largechange 和 smallchange 都设置为 1)。您按如下方式处理滚动事件:

// Global sheet number containing current sheet number
int sheetNum;

private void hsbSheet_Scroll(object sender, ScrollEventArgs e)
        {

            // Process only the EndScroll Event
            if (e.Type == ScrollEventType.EndScroll)
            {

                // Validation
                if (!checkValidation()) 
                {
                    // Rollback Scroll Value
                    hsbSheet.Value = sheetNum;
                    hsbSheet.Update();
                    // Exit
                    return;
                }

                // Process Scroll
                processScroll();

            }

        }

如果出现验证错误,滚动值会返回到之前的值。在这个例子中,用户试图将滚动条的值设置为 4。但由于出现验证错误,滚动值又回到了 3。现在如果他再次点击滚动条,现在的值是 5!现在我的问题来了,在重置为 3 后,如何阻止值以这种方式累积?也就是说,当他再次点击滚动条进行增量时,应该又是4了。

先谢谢了。

更新 #1

我正在尝试一切:

...
// Rollback Scroll Value
hsbSheet.Value = sheetNum;
hsbSheet.Refresh();
hsbSheet.ResetText();
hsbSheet.Update();
...

它仍然有同样的问题......

【问题讨论】:

    标签: winforms


    【解决方案1】:
        hsbSheet.Value = sheetNum;
    

    您无法在 Scroll 事件处理程序中更新 Value 属性,当事件处理程序返回时,它将很快再次被覆盖。您应该使用 e.NewValue 属性来覆盖它要去的地方。像这样:

        if (!checkValidation()) 
        {
            e.NewValue = sheetNum;   // or e.OldValue
            return;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-07
      • 2021-04-10
      • 2014-05-11
      • 2018-01-26
      • 2018-07-12
      • 2022-06-10
      • 2021-07-27
      • 2016-07-11
      相关资源
      最近更新 更多