[Tips][RichTextBox] Undo/Redoを実行する

RichTextBoxコントロールでは、メソッドを使用してUndo/Redoを行うことができます。

Undoを行うにはUndoメソッドを、Redoを行うにはRedoメソッドを使用します。

また、Undo操作が可能かどうかを調べるにはCanUndoプロパティを、Redoが可能かどうかを調べるにはCanRedoプロパティを参照します。Trueであれば操作可能です。

 

下記はUndo/Redoを実行する例です。

[Undo]ボタン、[Redo]ボタンがクリックされると、Undo/Redoが可能かを判断して操作を実行します。

 

 

VBの例

' [Undo]ボタンクリック時の処理
Private Sub btnUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUndo.Click
    'Undoできるか?
    If RichTextBox1.CanUndo = True Then
        '★★★ Undoを実行する ★★★
        RichTextBox1.Undo()
    End If
End Sub

' [Redo]ボタンクリック時の処理
Private Sub btnRedo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRedo.Click
    'Redoできるか?
    If RichTextBox1.CanRedo = True Then
        '★★★ Redoを実行する ★★★
        RichTextBox1.Redo()
    End If
End Sub

C#の例

// [Undo]ボタンクリック時の処理
private void btnUndo_Click(object sender, EventArgs e)
{
    // Undoできるか?
    if (richTextBox1.CanUndo == true)
    {
        // ★★★ Undoを実行する ★★★
        richTextBox1.Undo();
    }
}

// [Redo]ボタンクリック時の処理
private void btnRedo_Click(object sender, EventArgs e)
{
    // Redoできるか?
    if (richTextBox1.CanRedo == true)
    {
        // ★★★ Undoを実行する ★★★
        richTextBox1.Redo();
    }
}

[Tips][RichTextBox] キャレットの位置を取得する

[ad code=2 align=left]
キャレットの位置がどこにあるかを確認するには、SelectionStartプロパティを参照します。

またキャレットの位置が変更されたことを知るにはSelectionChangedイベントを使用します。

 

下記は、キャレットの位置を取得する例です。

SelectionStartプロパティとSelectionChangedイベントを利用して現在のキャレット位置をLabelコントロールに表示します。

 

 

VBの例

' 選択位置変更時の処理
Private Sub RichTextBox1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.SelectionChanged
    '★★★キャレットの位置をラベルに表示する★★★
    Label1.Text = "キャレット位置:" & RichTextBox1.SelectionStart.ToString()
End Sub

 

C#の例

// 選択位置変更時の処理
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
    // ★★★キャレットの位置をラベルに表示する★★★
    label1.Text = "キャレット位置:" + richTextBox1.SelectionStart.ToString();
}

[Tips][RichTextBox] フォーカスを失っても選択範囲のハイライトを維持する

[ad code=2 align=left]
通常文字列が選択されると、選択箇所がわかるようハイライトされます。

しかし別のコントロールにフォーカスが移ってしまうとハイライト表示は消えてしまうため、どの文字列が選択されているかはRichTextBoxにフォーカスを移すまで確認することができません。

そこで、フォーカスを失っても選択範囲のハイライトを維持するにはHideSelectionプロパティにFalseを設定します(既定値はTrue)。

 

下記は、フォーカスを失っても選択範囲のハイライトを維持する例です。

下図をよく見ていただきたいのですが、フォーカスはRichtextBoxの下に配置したTextBox(カーソルがあるのがわかるでしょうか)にありますが、RichTextBox上では「RichTextBox」が選択されています。

 

VBの例

' フォームロード時の処理
Private Sub Form15_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '★★★フォーカスを失っても選択範囲のハイライトを維持する★★★
    RichTextBox1.HideSelection = False
End Sub

 

C#の例

// フォームロード時の処理
private void Form15_Load(object sender, EventArgs e)
{
    // ★★★フォーカスを失っても選択範囲のハイライトを維持する★★★
    richTextBox1.HideSelection = false;
}