2012-02-25 2 views
4

私が行っていることは、リストボックスから選択されたものに応じてテキストで埋められているテキストボックスです。ユーザーが入力中にテキストボックス内の文字を置き換える方法は? (C#で)

は、テキストボックスには、次のようになりますと言う:「?」

blah blah ??? as?f 

私が行う方法を見つけ出すために必要なものを、ユーザーがテキストボックスにクリックし、削除したときにありその文字を*に置き換えて、その文字を削除しようとするたびに、 "?"で置き換えられます。その結果、「?」をすべて削除した場合、最終結果は

blah blah **? as*f 

のようになります。

どんなに私がオンラインで検索しましたどのくらい私は似た何かを見つけるように見えることはできません..私が見つけた最も近いものは、この質問です - Determine when and which character is added or deleted in a Text Box

しかし、それdoesntのは、本当に私がやろうとしています何のために役立ちます..もし誰かが見始める場所やそれをどうやって行うのかについての良いアイディアを持っていれば、私はとても素晴らしいことになるでしょう!

ありがとうございます!

EDIT:はい、これはWindowsフォームアプリケーション用です。申し訳ありませんが、私はそれを指定するのを忘れていました。 O.o

+0

このWinFormsはありますか? –

+0

申し訳ありませんが、忘れてしまったことを忘れてしまいました。 –

答えて

4

KeyDownイベントを処理し、デフォルト処理をバイパスすることができます。イベントハンドラは、次のようになります:あなたはまた、修飾キーのためのチェックを追加し、カーソル位置を調整し、必要に応じてテキストが、選択されたときにカスタム動作を実装することもできます

public void OnKeyDown(Object sender, KeyEventArgs e) 
{ 
    char[] text = textBox.Text.ToCharArray(); 
    int pos = textBox.SelectionStart; 

    switch (e.KeyCode) 
    { 
     case Keys.Back: if (pos == 0) return; pos --; break; 
     case Keys.Delete: if (pos == text.Length) return; break; 
     default: return; 
    } 

    switch (text[pos]) 
    { 
     case '?': text[pos] = '*'; break; 
     case '*': text[pos] = '?'; break; 
     default: return; 
    } 
    textBox.Text = new String(text); 
    e.Handled = true; 
} 

+0

これはほとんど動作します。コードの行 "textBox.selectionStart = pos;"を追加するたびにカーソルを元の位置に戻すには、?を削除します。もう1つのバックスペースのプレスからは1つの*が表示されます....しかし、バックスペースの代わりにdeleteを押すだけでうまくいくようです私は、私のkeydownのすべての1行にブレークポイントを入れて、それは "テキスト"をすべてのステップで正しいものとして表示しています...>< –

+0

別のものがありますか?バックスペースを処理するハンドラ?このハンドラでバックスペースを無効にして、それがまだ通過するかどうかを調べることができます。また、TextChangedイベントをリッスンすると、それをデバッグするのに役立ちます。 –

+0

これは私がこのエラーを直すことができないけれども、私が見て回ることができるものを見ても、使用しようとしているメソッドです。右の方向へのプッシュのおかげで! –

2

テキストボックス内にテキストを格納するには、各キーを押した後に保存された文字列とテキストボックス内のテキストを比較して、 '?'正しい場所のテキストボックステキストに「*」を挿入した場合は削除されました。

//get indexes of all '?' 
list<int> charlist = new list<int>(); 
string buff = textbox.Text; 
for(int c = 0; c< buff.length, c++) 
{ 
    if (buff[c] == '?') 
    { 
     charlist.add(c) 
    } 
} 
//inside keypress event 
foreach(int c in charlist) 
{ 
    if (textbox.Text[c] != '?') 
    { 
     textbox.Text = textbox.Text.Insert(c, "*"); 
    } 
} 
関連する問題