2017-11-20 7 views
0

こんにちは私はテキストエディタに取り組んでいます。 私は、括弧を追加するため、このコードがあります。テキストを追加した後、バックスペースで削除することはできません

char? lastChar = null; 
if (richTextBox.Text != "") 
{ 
    lastChar = richTextBox.Text[richTextBox.TextLength - 1]; 
} 
if(lastChar == '(') 
{ 
    richTextBox.AppendText(")"); 
} 

をし、そのこれらの括弧を追加し、そのカントは、バックスペースで削除されたとき。

+5

は、 '真なり「(」削除されますが、あなたのコードは、おそらくlastChar =='とすぐに再びそれを追加しています。でキーボードイベントをフィルタリングして削除を処理します。 –

+2

デバッガを使用すると、この時点で@MineGame159が非常に励まされます。まだこの行をしていますか?また、この行の 'richTextBox.Text!=" "'を ' string.IsNullOrEmpty(richTextBox.Text) '代わりに – MethodMan

+0

RichTextBoxにはキーボードサポートが組み込まれていませんか? –

答えて

0

Backspaceを押すと、テキストが'('で再び終了し、別の')'が追加されるため、削除できない理由があります。これを無効にするには、押されたキーがBackspaceキーであったかどうかを調べる必要があります。その場合は、ロジックをスキップしてください(ユーザーが自動付加された')'文字をバックスペースしてテキストを入力できるようにします)。あなたのコードを仮定

TextChangedイベントである、あなたができる一つのことは、あなたが、その後TextChangedイベントにチェックするキーがバックスペースだった場合KeyDownイベントに設定されますプライベート変数を作成しています。ボーナスとして、私は1つの行に既存のコードを簡素化

:)

private bool lastKeyPressedWasBackspace; 

private void richTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    lastKeyPressedWasBackspace = e.KeyCode == Keys.Back; 
} 

private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 
    if (!lastKeyPressedWasBackspace && richTextBox.Text.EndsWith("(")) 
    { 
     richTextBox.AppendText(")"); 
    } 
} 
関連する問題