我有 3 个 ascx 控件以选项卡方式加载到一个 aspx 文件中。我在第一个 ascx 控件中有一个按钮。如果单击该按钮,则我必须移至下一个选项卡。如何移动到下一个标签?
1 回答
我假设您或您的组织编写了 3 个 ascx 控件?
您将不得不提醒选项卡控件(页面?)的父选项卡控件(ascx 控件)的子控件已请求选项卡控件前进到另一个选项卡。
我知道如何做到这一点的最简单、耦合最少的方法是使用自定义事件。步骤如下:
在 ascx 控件中实现一个事件,当单击 ascx 控件中的按钮时引发该事件。这个 Q+A中有一个例子。
由于您使用的是 Visual Basic,因此第四步的语法会有所不同。我在下面的下一步中对此进行了描述。
在页面中为该事件设置处理程序。(这是我链接到的示例中的第 4 步。)
将处理程序与用户控件关联的最简单方法是在标记中:
<uc:MyUserControl TabChangeRequested="MyUserControl_TabChangeRequested" runat="server" id="userControl1" />
此示例假定这
MyUserControl_TabChangeRequested
是您页面的公共或受保护方法。如果这不起作用,您可以以编程方式进行关联。如何执行此操作取决于用户控件是否对页面本身可见,或者是选项卡控件的子控件。如果用户控件是页面的子级,则可以使用以下代码(在 Page_Load 中):
AddHandler userControl1.TabChangeRequested, AddressOf MyUserControl_TabChangeRequested
这是一种与 C# 非常不同的语法,这会使示例变得混乱。
如果用户控件是选项卡控件的子控件而不是在页面控件中声明,则需要首先从特定选项卡的控件集合中获取对用户控件的引用:
Dim uc as MyUserControl = TabControl1.Tabs(0).FindControl("userControl1") AddHandler uc.TabChangeRequested, AddressOf MyUserControl_TabChangeRequested
根据选项卡控件及其编写方式,您可能需要查看选项卡控件自己的子项而不是选项卡的子项。上一个示例的第一行如下所示:
Dim uc as MyUserControl = TabControl1.FindControl("userControl1")
在您的处理程序中,执行您需要执行的任何操作以更改到下一个选项卡。