• ベストアンサー

フォーム上のすべての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するのは避けたい) いろいろ試してみましたが、うまくコードがかけません。ご迷惑をおかけいたしますが、皆様の知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.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

xiaolong_goo
質問者

お礼

お返事ありがとうございました。 まさにやりたかったことができました。 再帰処理はおぼろげながら考えたのですが、どこをどうすればうまくできるのかまったくわからない状態でした。 このままのコードで十分活用できます。

その他の回答 (3)

  • kikujack
  • ベストアンサー率47% (17/36)
回答No.3

下記のコードを試してください 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

xiaolong_goo
質問者

お礼

お返事ありがとうございました。 教えていただいたコードだと、フォーム上に複数のグループボックスがあると、最初の1番目しか処理できませんでした。 いろいろと考えてみたところ、教えていただいたコードを改造することで処理できるようになりました。

  • mono-001
  • ベストアンサー率32% (13/40)
回答No.2

No1です dim aaa(3) as string ここ間違いです public aaa(3) as TextBox

  • mono-001
  • ベストアンサー率32% (13/40)
回答No.1

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 ----クリアしたいところで上記を実行---- 上記みたいにテキストボックスだけ配列化すればできます もっとスマートな方法があるかもしれませんけど

xiaolong_goo
質問者

お礼

お返事ありがとうございました。 配列に格納することも考えたのですが、TextBoxの数が多くなると面倒ですのでfor each で処理する方法を考えました。

関連するQ&A