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

使用vb.net在asp.net中动态删除选项卡容器中的选项卡面板,asp.net,vb.net,Asp.net,Vb.net,我正在asp.net中创建聊天应用程序。在本文中,我将在选项卡容器中为每个用户动态创建选项卡面板。当您选择一个新用户时,我将为他生成一个选项卡,其中包含两个文本框和发送按钮以发送消息。如果他不想继续聊天,我需要删除那个标签。是否有任何方法可以使用vb.net删除asp.net中的这些选项卡 这是一个完整的工作示例,可以分解为以下几行(在RemoveTab中): 但是你自己看看 第ASPX页: <asp:ToolkitScriptManager ID="ToolkitScriptManage

我正在asp.net中创建聊天应用程序。在本文中,我将在选项卡容器中为每个用户动态创建选项卡面板。当您选择一个新用户时,我将为他生成一个选项卡,其中包含两个文本框和发送按钮以发送消息。如果他不想继续聊天,我需要删除那个标签。是否有任何方法可以使用vb.net删除asp.net中的这些选项卡

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

但是你自己看看

第ASPX页:

<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>
聊天用户控件:

<%@ 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>

如果您还有其他问题,请提问。

谢谢。。。更新面板有另一个问题。更新面板中有一个选项卡容器,按照您的建议,我正在其中加载用户控件。我需要查询数据库并检查当前登录的用户是否有任何消息。如果我在数据库中找到任何消息,则我需要将web用户控件加载到选项卡容器中,并向他显示消息。为此,我正在使用计时器功能更新面板,并刷新包含选项卡容器的整个更新面板。出现了问题。usercontrol中的文本框未保持其当前状态position@krish:我认为这与您的问题“删除选项卡容器中的选项卡面板”无关,是吗?尽量减少您的问题,并提出一个包含所有必要细节的问题,以再现/理解问题(例如,“不保持其当前位置”是什么意思?)。对此我很抱歉。。。。。。我将发布一个新问题。。。。。。。我所说的“不保持其当前位置”是指我每5秒设置一次计时器。。。。每5秒后,计时器刷新更新面板,其中插入了所有选项卡…如果在5秒后键入,则从文本框开始键入。。。谢谢你回答我的问题,我将投票……请看一下我的新问题:
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
<%@ 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>
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