我試圖實現類似於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被設置回原來的值,再加上一個。如果我按住向下箭頭,它大多正確地工作。一旦釋放按鈕,它仍會跳回一點點。
任何想法是什麼可能導致這一點,以及任何修復它的方式?
乾杯!
編輯:這是我的滾輪代碼。它非常相似,令人困惑的是它爲什麼不起作用。這是在包含面板的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)?出於什麼目的? – 2011-01-06 08:16:23
如果不同!= SmallChange,它意味着如果可滾動範圍觸發底部。 – Smashery 2011-01-06 23:21:44