假设你有一个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();
...
它仍有同样的问题......
答案 0 :(得分:0)
hsbSheet.Value = sheetNum;
您无法更新Scroll事件处理程序中的Value属性,当事件处理程序返回时,它将很快被覆盖。您应该使用e.NewValue属性来覆盖它的去向。像这样:
if (!checkValidation())
{
e.NewValue = sheetNum; // or e.OldValue
return;
}