【问题标题】:How to remove textboxes on button click (vb.net)?如何删除按钮单击(vb.net)上的文本框?
【发布时间】:2013-03-15 11:42:26
【问题描述】:

我不知道如何通过单击 Windows 窗体中的按钮来删除文本框。

这是我的故事:

最初,我想在单击按钮时添加文本框,在网上搜索后,我能够在这个论坛上找到如何做到这一点。 https://stackoverflow.com/questions/15461978/adding-new-textbox-with-button-click

我使用了用户“Rajaprabhu Aravundasam”(第二个答案)给出的代码。这里只是我使用的部分代码(为了不让你感到困惑):

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 循环来删除控件(标签和富文本框)。在我的“-”按钮代码中,我已将前 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') 还是带有名称的富文本框("RichTextBox" & count),如果是,它们将被删除。其余代码相同。

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

另外,我尝试在默认的富文本框中使用该代码,并且成功了!但是对于在运行时创建的富文本框,它不起作用。

有人可以澄清一下吗?

【问题讨论】:

    标签: dynamic textbox runtime


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多