0

Windowsフォームのボタンをクリックしてテキストボックスを削除する方法がわかりません。

これが私の話です:

当初はボタンをクリックするだけでテキストボックスを追加したかったのですが、ネットを検索してみると、このフォーラムでその方法を見つけることができました。https://stackoverflow.com/questions/15461978/adding-new-textbox-with-button-click

ユーザー「RajaprabhuAravindasam」(2番目の回答)が提供したコードを使用しました。これは私が使用したコードの一部です(あなたを混乱させないために):

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が最初に削除され、次にいいえが削除されます。2回目のクリックで3回、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

論理的には、「追加」を「削除」に置き換えるだけでしたが、「新規」を何に置き換えるかわかりません。そして、私の質問は、「新規」の代わりに何を使用する必要があるかということです。まったく異なるコードを使用する必要がある場合は、教えてください。

どんな助けでも大歓迎です。

アップデート:

わかりました。この質問をしてからいくつかの調査を行いました。コントロール(ラベルとリッチテキストボックス)の削除は、ForEachループを使用して実行できると推測できました。'-'ボタンのコードでは、コードの最初の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)、もしそうなら、それらは削除されます。残りのコードは同じです。

動作していますが、完全ではありません。ラベルは正常に削除されているため、機能していますが、リッチテキストボックスでは機能していません。理由がわかりません。日時ピッカーやテキストボックスなどの他のコントロールのコードを試しましたが、これらのいずれでも機能しません。ラベルに対してのみ機能しているようです。

また、デフォルトのリッチテキストボックスでコードを使用してみましたが、うまくいきました。ただし、実行時に作成されるリッチテキストボックスの場合、機能しません。

誰かがこれについて私を明確にすることができますか?

4

1 に答える 1

0

私は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
于 2013-07-09T22:24:05.373 に答える