• ベストアンサー

VB2008、文字色について教えて下さい

VB2008を使用しています。 現在、Form内複数あるTextBox内の文字をいくつか選択し、RichTextBox内に"・"で区切って代入するプログラムを作成しています。 その際、RichTextBox内に代入されたTextBoxの文字色を赤色に変える(元は黒色です)コードを下記のように作成しました。 Dim strList() As String strList = RichTextBox1.Text.Split("・"c) For Each strMoji As String In strList Select Case strMoji Case TextBox1.Text TextBox1.ForeColor = Color.Red Case TextBox2.Text TextBox2.ForeColor = Color.Red End Select Next 上記コードは問題ないのですが、RichTextBox内に一度代入された複数のTextBoxの文字から、いくつかを選択して削除した際、選択したTextBoxの文字を元の黒色に戻す方法がわかりません。単純に全てのTextBoxの文字色を黒色に戻すコードを書いてしまうと、同様の操作を他のRichTextBoxに適用した場合、そちらに代入された文字色も黒色に戻ってしまいます。上記のコードを応用すれば出来そうなのですが、良い方法はないでしょうか?上記コード3行目の「In」を「Out」や「Cut」に変更しても構文エラーになってしまいました。

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

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

下記のようなメソッドを作成してみる '---------------------------------------   Private Sub containString(ByVal baseString As String, ByVal cc As Control.ControlCollection)     For Each ctl As Control In cc       ''テキストボックスのときのみ       If TypeOf ctl Is TextBox Then         Dim txt As TextBox = CType(ctl, TextBox)         ''指定文字列中にテキストボックスの値は含まれているか         If baseString.Contains(txt.Text) Then           txt.ForeColor = Color.Red         Else           txt.ForeColor = Color.Black         End If       End If       ''コンテナになっていたら再帰処理       If ctl.Controls.Count > 0 Then         containString(baseString, ctl.Controls)       End If     Next   End Sub '--------------------------------------- 使用例 '---------------------------------------   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     Me.containString(Me.RichTextBox1.Text, Me.Controls)   End Sub '---------------------------------------

caster01
質問者

お礼

ご回答頂きありがとうございます。教えて頂いたコードを使用し、目的を達成することが出来ました。ただ私自身、このコードを理解出来ておらず教えて頂いた内容をそのまま貼り付けただけになっていますので、もっと勉強して内容も理解出来るようになりたいと思います。大変勉強になるご回答を頂き本当にありがとうございました。

関連するQ&A