HScrollBar在重置其值后不断累积值

时间:2014-07-31 15:35:10

标签: winforms

假设你有一个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();
...

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

1 个答案:

答案 0 :(得分:0)

    hsbSheet.Value = sheetNum;

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

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