- ベストアンサー
フォーム上のすべてのTextBoxを空にしたい
現在適用中のコード:(VB2008) Dim objtextbox As Control For Each objtextbox In Me.Controls objtextbox.Text = "" Next 問題: 1、VB6と違い、Captionプロパティがなくなったため、TextBox以外のTextプロパティも空になってしまうので、コントロールがTextBoxのときだけ処理したい。 2、上記のコードだと、フォーム上にあるグループボックスの中は適用されない。In Me.controles 一発ですべてのグループボックスの中のTextプロパティまで処理したい。 3、そんなのは無理という場合、すべてのコントロールをフォームがロードされた状態にしたい。(できれば、CloseしてShowするのは避けたい) いろいろ試してみましたが、うまくコードがかけません。ご迷惑をおかけいたしますが、皆様の知恵をお貸しください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
[準備する関数] '指定されたコントロールコレクション内のテキストボックスをクリアする Private Sub ClearTextBox(cc As Control.ControlCollection) For Each ctl As Control In cc If TypeOf ctl Is TextBox Then CType(ctl, TextBox).Text = String.Empty Else If ctl.Controls.Count > 0 Then ClearTextBox(ctl.Controls) '再帰処理 End If Next End Sub [使用例] ClearTextBox(Me.Controls) ※テキスト書きなので、間違いがあるかもしれませんw
その他の回答 (3)
- kikujack
- ベストアンサー率47% (17/36)
下記のコードを試してください Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim c As Control For Each c In Me.Controls If TypeOf c Is TextBox Then 'TEXTBOXか? c.Text = "" End If If TypeOf c Is GroupBox Then 'GroupBoxの処理 Dim c2 As Control For Each c2 In c.Controls If TypeOf c2 Is TextBox Then c2.Text = "" End If Next End If Next End Sub
お礼
お返事ありがとうございました。 教えていただいたコードだと、フォーム上に複数のグループボックスがあると、最初の1番目しか処理できませんでした。 いろいろと考えてみたところ、教えていただいたコードを改造することで処理できるようになりました。
- mono-001
- ベストアンサー率32% (13/40)
No1です dim aaa(3) as string ここ間違いです public aaa(3) as TextBox
- mono-001
- ベストアンサー率32% (13/40)
dim aaa(3) as string aaa(0) = TextBox1 aaa(1) = TextBox2 aaa(2) = TextBox3 aaa(3) = TextBox4 ----上記処理をフォームの起動時に実行---- dim i as Integer for i = 0 to 3 aaa(i).text = "" next i ----クリアしたいところで上記を実行---- 上記みたいにテキストボックスだけ配列化すればできます もっとスマートな方法があるかもしれませんけど
お礼
お返事ありがとうございました。 配列に格納することも考えたのですが、TextBoxの数が多くなると面倒ですのでfor each で処理する方法を考えました。
お礼
お返事ありがとうございました。 まさにやりたかったことができました。 再帰処理はおぼろげながら考えたのですが、どこをどうすればうまくできるのかまったくわからない状態でした。 このままのコードで十分活用できます。