none
リッチテキストボックス内の(任意の)文字列を選択して削除したい RRS feed

  • 質問

  • Vs2010Proを使っています。
    Windowsフォーム内にリッチテキストボックスが1個あります。

    そのリッチテキストボックス内に改行されている文字列が複数個あります。
    リッチテキストボックスには1行ごとに改行して表示しています。

    Dim a As String
    a = TextBox7.Text
    a &= vbLf
    RichTextBox1.AppendText(a)

    リッチテキストボックス内の文字列を選択する行が、どの行であると決まっているわけではありません。
    例えば10行表示されていた場合、1行目だけ、8行目だけ等になります。
    複数選択する場合であっても、1行ずつ選択することになります。

    RichTextBox1.HideSelection = False
    RichTextBox1.SelectionStart = 0
    RichTextBox1.SelectionLength = RichTextBox1.Text.IndexOf(vbLf) + 0
    RichTextBox1.Focus()
    RichTextBox1.SelectedText = ""

    現状のコードですと、リッチテキストボックス内の1行毎の文字列を選択できません。
    ボタンをクリックすると、上から順に1行ずつ削除されてしまいます。

    リッチテキストボックス内の任意の文字列をクリックして行を選択、ボタンをクリックすると
    その選択した行が削除されし、削除された行間を上に詰めます。
    ご教授下さい。
    宜しくお願い致します。

    2013年3月13日 2:42

回答

  • こんな感じでどうでしょう?

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim index As Integer = RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart)
    
            Dim newLines As New List(Of String)
            For i As Integer = 0 To RichTextBox1.Lines.Count - 1
                If i <> index Then
                    newLines.Add(RichTextBox1.Lines(i))
                End If
            Next
    
            RichTextBox1.Lines = newLines.ToArray()
        End Sub

    GetLineFromCharIndexで行番号を取得、Linesをループで回して選択行以外の文字列の配列を作ってRichTextBoxに再格納、という事です。

    以上、参考まで。

    • 回答としてマーク yosyoso 2013年3月14日 1:53
    • 回答としてマークされていない yosyoso 2013年3月14日 1:53
    • 回答としてマーク yosyoso 2013年3月14日 4:40
    2013年3月13日 5:49

すべての返信

  • こんな感じでどうでしょう?

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim index As Integer = RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart)
    
            Dim newLines As New List(Of String)
            For i As Integer = 0 To RichTextBox1.Lines.Count - 1
                If i <> index Then
                    newLines.Add(RichTextBox1.Lines(i))
                End If
            Next
    
            RichTextBox1.Lines = newLines.ToArray()
        End Sub

    GetLineFromCharIndexで行番号を取得、Linesをループで回して選択行以外の文字列の配列を作ってRichTextBoxに再格納、という事です。

    以上、参考まで。

    • 回答としてマーク yosyoso 2013年3月14日 1:53
    • 回答としてマークされていない yosyoso 2013年3月14日 1:53
    • 回答としてマーク yosyoso 2013年3月14日 4:40
    2013年3月13日 5:49
    1. GetLineFromCharIndexで現在行の行番号を取得
    2. GetFirstCharIndexFromLineで、現在行および次の行の先頭のCharIndexを取得
    3. 現在行先頭から次の行の先頭までを選択してSelectedText = ""に

    って感じですかね。

    2013年3月13日 6:02
  • みっとさん

    ありがとうございました。

    2013年3月14日 4:41