首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vb.net动态删除asp.net中选项卡容器中的选项卡面板

使用vb.net动态删除asp.net中选项卡容器中的选项卡面板
EN

Stack Overflow用户
提问于 2012-02-02 02:49:43
回答 1查看 2.9K关注 0票数 0

我正在用asp.net创建一个聊天应用程序。在这里,我将在选项卡容器中为每个用户动态创建选项卡面板。当您选择一个新用户时,我将为他生成一个带有两个文本框和用于发送消息的send按钮的选项卡。如果他不想继续聊天,我需要移除或删除该选项卡。有没有什么方法可以使用vb.net在asp.net中移除或删除这些选项卡?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 04:33:04

这是一个完整的工作示例,它可以分解成下面这一行(在RemoveTab中):

代码语言:javascript
复制
Me.TabContainer1.Tabs.Remove(tab)

但是你自己去看看吧。

Page-ASPX:

代码语言:javascript
复制
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" CombineScripts="true">
</asp:ToolkitScriptManager>
<div>
   <asp:UpdatePanel ID="UpdTabContainer" ChildrenAsTriggers="false" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
   <asp:TabContainer ID="TabContainer1" runat="server" AutoPostBack="true">
        <asp:TabPanel ID="TabUserList" runat="server" HeaderText="UserList">
            <ContentTemplate>
                <asp:UpdatePanel ID="UpdUserList" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:ListBox ID="ListBox1" SelectionMode="Single" AutoPostBack="true" OnSelectedIndexChanged="UserChanged" runat="server">
                            <asp:ListItem Text="User 1" Value="1"></asp:ListItem>
                            <asp:ListItem Text="User 2" Value="2"></asp:ListItem>
                            <asp:ListItem Text="User 3" Value="3"></asp:ListItem>
                        </asp:ListBox>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="TabContainer1" EventName="ActiveTabChanged" />
                    </Triggers>
                </asp:UpdatePanel>
            </ContentTemplate>
        </asp:TabPanel>
    </asp:TabContainer>
    </ContentTemplate> 
    </asp:UpdatePanel>
</div>

代码背后:

代码语言:javascript
复制
Public Class TabContainerSample
    Inherits System.Web.UI.Page

    Const idSuffix = "_"c

    Property CreatedTabIDs As List(Of String)
        Get
            If Session("CreatedTabIDs") Is Nothing Then
                Session("CreatedTabIDs") = New List(Of String)
            End If
            Return DirectCast(Session("CreatedTabIDs"), List(Of String))
        End Get
        Set(value As List(Of String))
            Session("CreatedTabIDs") = value
        End Set
    End Property

    Private Sub TabContainerSample_Init(sender As Object, e As System.EventArgs) Handles Me.Init
        For Each userID In CreatedTabIDs
            AddTab(userID)
        Next
    End Sub

    Private Sub AddTab(tabID As String)
        Dim ucChat = DirectCast(Page.LoadControl("ChatControl.ascx"), ChatControl)
        ucChat.UserName = tabID
        AddHandler ucChat.ChatSubmitted, AddressOf chatSubmitted
        AddHandler ucChat.ChatClosed, AddressOf chatClosed
        Dim newTabPanel = New AjaxControlToolkit.TabPanel
        newTabPanel.ID = String.Format("Tab{0}{1}", idSuffix, tabID)
        newTabPanel.HeaderText = String.Format("TabPanel {0}", tabID)
        newTabPanel.Controls.Add(ucChat)
        TabContainer1.Tabs.Add(newTabPanel)
    End Sub

    Private Sub RemoveTab(tabID As String)
        Dim tab = (From t In Me.TabContainer1.Tabs.Cast(Of AjaxControlToolkit.TabPanel)()
                  Where t.ID.Contains(idSuffix)
                  Let id = t.ID.Substring(t.ID.LastIndexOf(idSuffix) + 1)
                  Where id = tabID
                  Select t).First
        Me.TabContainer1.Tabs.Remove(tab)
        Me.CreatedTabIDs.Remove(tabID)
        Me.UpdTabContainer.Update()
    End Sub

    Protected Sub UserChanged(sender As Object, e As EventArgs)
        Dim userName = DirectCast(sender, ListBox).SelectedValue
        If Not CreatedTabIDs.Contains(userName) Then
            AddTab(userName)
            CreatedTabIDs.Add(userName)
            Me.UpdTabContainer.Update()
        End If
    End Sub

    Private Sub chatSubmitted(chat As ChatControl)
        ' do something '
    End Sub

    Private Sub chatClosed(chat As ChatControl)
        RemoveTab(chat.UserName)
    End Sub

End Class

Chat-UserControl:

代码语言:javascript
复制
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="ChatControl.ascx.vb" Inherits="WebApplication1.ChatControl" %>
<asp:UpdatePanel ID="UpdChatControl" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
    Username: <asp:Label ID="LblUserName" runat="server" Text="0"></asp:Label>
    <br /><asp:TextBox ID="TxtChat" runat="server" TextMode="MultiLine" Rows="4"></asp:TextBox>
    <br /><asp:Button ID="BtnSend" runat="server" Text="Send" />
    <br /><asp:Button ID="BtnClose" runat="server" Text="Close" />
    </ContentTemplate>
</asp:UpdatePanel>

代码背后:

代码语言:javascript
复制
Public Class ChatControl
    Inherits System.Web.UI.UserControl

    Public Event ChatSubmitted(sender As ChatControl)
    Public Event ChatClosed(sender As ChatControl)

    Public Property UserName As String
        Get
            Return Me.LblUserName.Text
        End Get
        Set(value As String)
            Me.LblUserName.Text = value
        End Set
    End Property

    Public Property ChatText As String
        Get
            Return Me.TxtChat.Text
        End Get
        Set(value As String)
            Me.TxtChat.Text = value
        End Set
    End Property

    Private Sub BtnSend_Click(sender As Object, e As System.EventArgs) Handles BtnSend.Click
        RaiseEvent ChatSubmitted(Me)
        Me.UpdChatControl.Update()
    End Sub

    Private Sub BtnClose_Click(sender As Object, e As System.EventArgs) Handles BtnClose.Click
        RaiseEvent ChatClosed(Me)
        Me.UpdChatControl.Update()
    End Sub
End Class

如果您有进一步的问题,请提问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9101458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档