如何删除按钮单击(vb.net)上的文本框?

时间:2013-03-25 20:31:29

标签: dynamic textbox runtime

我不知道如何在Windows窗体中点击按钮删除文本框。

这是我的故事:

最初,我想在点击按钮时添加文本框,在搜索网络时,我能够在此论坛上找到如何执行此操作。 https://stackoverflow.com/questions/15461978/adding-new-textbox-with-button-click

我使用了用户“Rajaprabhu Aravindasam”(第二个回答)给出的代码。这里只是我使用的代码的一部分(为了不让你迷惑):

Private Sub Button_AddTask_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_AddTask.Click
    count += 1

    TabPage_TaskStructure.Controls.Add(New Label() With _
                                       {.Name = "Label_Task" & count})
    TabPage_TaskStructure.Controls.Add(New RichTextBox() With _
                                       {.Name = "RichTextBox" & count})      
End Sub

现在,正如您所看到的,按钮“Button_AddTask”(我的表单上的“+”按钮)的目的是创建富文本框及其各自的标签。假设在下面创建了富文本框和标签另一个。

在“+”按钮旁边,有一个“ - ”按钮。我想要的是使用这个' - '按钮顺序删除所有创建的文本框。也就是说,如果我使用按钮“+”创建了4个文本框,则在单击“ - ”按钮时将首先删除文本框4,然后单击“否”。第二次点击后3,然后第三次点击后返回2,依此类推。

顺序部分不是问题,我完全知道如何做到这一点。这是我尝试过的代码的一部分:

Private Sub Button_DeleteTask_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_DeleteTask.Click
    TabPage_TaskStructure.Controls.Remove(New Label() With _
                                       {.Name = "Label_Task" & count})
    TabPage_TaskStructure.Controls.Remove(New RichTextBox() With _
                                       {.Name = "RichTextBox" & count})

    count -= 1

    If count = 1 Then
        Button_DeleteTask.Visible = False
    End If
End Sub

我在逻辑上所做的只是将'添加'替换为'删除',但我不知道如何替换'新'。所以我的问题是:需要使用什么而不是'新'?如果我需要使用完全不同的代码,请告诉我。

非常感谢任何帮助。

更新

好的,我已经做了一些研究,因为我已经问了这个问题,并且我已经能够推断出可以通过使用For Each循环来删除控件(Label& Rich Text Box)。在我的“ - ”按钮的代码中,我用这个替换了前4行代码:

Dim Ctrl As Control
For Each Ctrl In TabPage_TaskStructure.Controls
    If TypeOf Ctrl Is Label And Ctrl.Name = "Label_Task" & count Then
       TabPage_TaskStructure.Controls.Remove(Ctrl)
    ElseIf TypeOf Ctrl Is RichTextBox And Ctrl.Name = "RichTextBox" & count Then
        TabPage_TaskStructure.Controls.Remove(Ctrl)
    End If
Next

因此,当我单击“ - ”按钮时,程序会检查选项卡页面上的每个控件(TabPage_TaskStructure)是否是带有名称的标签(“Label_Task”& count')或富文本框。 name(“RichTextBox”& count),如果是,它们将被删除。其余代码是相同的。

它正在发挥作用,但并不完全。它适用于标签,因为它们被成功删除,但不适用于富文本框。我不明白为什么。我已经尝试过其他控件的代码,例如日期时间选择器和文本框,并且它也不适用于其中任何一个。它似乎仅适用于标签。

另外,我尝试在默认的富文本框中使用代码,它工作正常!但是对于在运行时创建的富文本框,它不起作用。

有人能澄清一下吗?

1 个答案:

答案 0 :(得分:0)

我并不擅长vb,但是从简单的逻辑来看,如果接受“IF”参数,代码将移至“End If”并跳过“Else”altoghter。 试试这个:

Dim Ctrl As Control
    For Each Ctrl In TabPage_TaskStructure.Controls
        If TypeOf Ctrl Is Label And Ctrl.Name = "Label_Task" & count Then
            TabPage_TaskStructure.Controls.Remove(Ctrl)
        End If
        If TypeOf Ctrl Is RichTextBox And Ctrl.Name = "RichTextBox" & count Then
            TabPage_TaskStructure.Controls.Remove(Ctrl)
        End If
Next