我们知道 Page 的 MaintainScrollPositionOnPostBack 属性为 True 时,PostBack 时页面就会自动维护滚动条位置。而在上一篇「维护 Panel 滚动条位置」文章中,也介绍如何利用 HiddenField 来维护 Panel 滚动条的位置;在这篇文章中,我们将利用相同的原理,扩展 Panel 控件,使得 Panel 控件就自动具有此功能。

我们将继承 Panel 控件下来命名为 TBPanel ,如同 Page 一样,在 TBPanel 中新增一个 MaintainScrollPositionOnPostBack 属性,当MaintainScrollPositionOnPostBack 设定 True 时,TBPanel 就会自动维护 PostBack 时滚动条的位置。

TBPanel 完整的程序代码如下
 1扩展 Panel 控件 - 自动维护滚动条位置Imports System
 2扩展 Panel 控件 - 自动维护滚动条位置Imports System.Collections.Generic
 3扩展 Panel 控件 - 自动维护滚动条位置Imports System.ComponentModel
 4扩展 Panel 控件 - 自动维护滚动条位置Imports System.Text
 5扩展 Panel 控件 - 自动维护滚动条位置Imports System.Web
 6扩展 Panel 控件 - 自动维护滚动条位置Imports System.Web.UI
 7扩展 Panel 控件 - 自动维护滚动条位置Imports System.Web.UI.WebControls
 8扩展 Panel 控件 - 自动维护滚动条位置
 9扩展 Panel 控件 - 自动维护滚动条位置<ToolboxData("<{0}:TBPanel runat=server></{0}:TBPanel>")> _
10


程序代码中主要是透过 DoMaintainScrollPosition 方法,是用来维护滚动条位置。在此方法中会输出二个 HiddenField 来记录水平及垂直滚动条的位置,并在页面上注册 Panel_SaveScrollPosition 及 Panel_RestoreScrollPosition 二个 JavaScript 函式,当页面 Sumbit 时会呼叫 Panel_SaveScrollPositio 函式将 Panel 的滚动条位置记录于 HiddenField,而 PostBack 后重新载入页面时会呼叫 Panel_RestoreScrollPosition 来还原滚动条位置。

程序代码下载:TBPanel.rar

相关文章: