- ベストアンサー
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」に変更しても構文エラーになってしまいました。
- みんなの回答 (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 '---------------------------------------
お礼
ご回答頂きありがとうございます。教えて頂いたコードを使用し、目的を達成することが出来ました。ただ私自身、このコードを理解出来ておらず教えて頂いた内容をそのまま貼り付けただけになっていますので、もっと勉強して内容も理解出来るようになりたいと思います。大変勉強になるご回答を頂き本当にありがとうございました。