前回はKeyPressイベントの処理をしました。今回は文字列の削除をやってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public partial class SyncRichTextBox : UserControl { protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Back) { e.Handled = true; Back(); return; } if (e.KeyCode == Keys.Delete) { e.Handled = true; Delete(); return; } base.OnKeyDown(e); } } |
まず、どこが選択されているかわかるようにプロパティを追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public partial class SyncRichTextBox : UserControl { public int SelectionStart { get { return richTextBoxEx1.SelectionStart; } set { richTextBoxEx1.SelectionStart = value; } } public int SelectionLength { get { return richTextBoxEx1.SelectionLength; } set { richTextBoxEx1.SelectionLength = value; } } } |
BackSpaceキーが押されたとき、選択されている文字列がある場合は文字列を削除、ない場合は前の文字を1字削除します。そこで・・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public partial class SyncRichTextBox : UserControl { void Back() { if (SelectionLength > 0) { SetSelectedText("", "BackSpace"); } else { SelectionStart--; SelectionLength = 1; SetSelectedText("", "BackSpace"); } } } |
Deleteキーの場合は、選択されている文字列がある場合は文字列を削除、ない場合は次の文字を1字削除します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public partial class SyncRichTextBox : UserControl { void Delete() { if (SelectionLength > 0) { SetSelectedText("", "Delete"); } else { if (richTextBoxEx1.Text.Length > SelectionStart) { SelectionLength = 1; SetSelectedText("", "Delete"); } } } } |
それから改行キーやスペースキーが押されたときにも対応できるようにしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public partial class SyncRichTextBox : UserControl { protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.Handled = true; NewLine(); return; } if (e.KeyCode == Keys.Space) { e.Handled = true; Space(); return; } base.OnKeyDown(e); } void NewLine() { SetSelectedText("\n", "Return"); } void Space() { SetSelectedText(" ", "Space"); } } |