重制
1.Panel設定AutoScroll=True。
2.在Panel内放置控件,比如文本框、ListBox,讓其出現滾動條。
3.在選中子控件(子控件獲得焦點)時,滾動條可能會自動滾動。
解決
試過在子控件的Enter事件裡擷取滾動條的位置,然後在MouseDown事件裡将滾動後的滾動條再複位,不過感覺效果不行。
然後找了一篇:See Win App: Is your AutoScroll too auto?,蛋疼的是無法通路。不過還好有人把關鍵代碼放出來了。
/// <summary>
/// 定義自動滾動定位委托
/// </summary>
/// <param name="ctrl">指定的自動滾動定位的控件</param>
/// <param name="p">指定的自動滾動定位的位置</param>
protected delegate void AutoScrollPositionDelegate(ScrollableControl ctrl, Point p);
private void TextBox1_Enter(EventArgs e)
{
if (Parent is Panel)
{
Point p = (this.Parent as Panel).AutoScrollPosition;
AutoScrollPositionDelegate del = new AutoScrollPositionDelegate(SetAutoScrollPosition);
Object[] args = { this.Parent as Panel, p};
BeginInvoke(del, args);
}
}
/// <summary>
/// 設定指定的可滾動控件的自動滾動定位的位置。
/// </summary>
/// <param name="sender"></param>
/// <param name="p"></param>
private void SetAutoScrollPosition(ScrollableControl sender, Point p)
{
p.X = Math.Abs(p.X);
p.Y = Math.Abs(p.Y);
sender.AutoScrollPosition = p;
}
Panel.AutoScrollPosition:擷取或設定自動滾動定位的位置。需注意,設定的時候X,Y得為正數;擷取的卻是負數。
轉載于:https://www.cnblogs.com/ainijiutian/archive/2011/12/23/2299172.html