0

如何更改文本框中的字母?

例如,当用户键入“L”时,将键入“N”。当我使用 axshockwavflash 并且需要在 flash 和 c# 之间建立连接时,flash 中有很多其他语言的 undefiend 单词,我必须为其替换。我使用了 text.replace() 函数,但它不适用于我的情况. 我像下面这样使用它:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    textBox1.Text.Replace("ی","ي");
}
4

3 回答 3

1

尝试分配:

textBox1.Text = textBox1.Text.Replace("ی","ي");
于 2013-11-02T20:32:46.930 回答
1

请记住,字符串是不可变的。这意味着当您对其执行 .Replace 时,原始字符串不会更改。制作了一份副本。因此,只有将文本设置为这个新值时它才会起作用。就像我在下面做的

private void textBox1_TextChanged(object sender, EventArgs e)
{
     textBox1.Text = textBox1.Text.Replace("ی","ي");
}
于 2013-11-02T20:40:00.837 回答
0

您可以定义一个字典来保存映射的所有必要条目并KeyPress像这样处理事件:

Dictionary<char,char> dict = new Dictionary<char,char>();
//Initialize your dict, this should be done somewhere in your form constructor
dict['L'] = 'N';
dict['A'] = 'B';
//....
//KeyPress event handler for your textBox1
private void textBox1_KeyPress(object sender, KeyPressEventArgs e){
   char c;
   if(dict.TryGetValue(e.KeyChar, out c)) e.KeyChar = c;
}

注意:为了防止用户粘贴一些不需要的文本,您可以尝试捕获消息WM_PASTE,从剪贴板获取文本并将更正的文本设置回剪贴板,如下所示:

public class NativeTextBox : NativeWindow {
    public Dictionary<char, char> CharMappings;
    public NativeTextBox(Dictionary<char,char> charMappings){
      CharMappings = charMappings;
    }
    protected override void WndProc(ref Message m) {
        if (m.Msg == 0x302){ //WM_PASTE
            string s = Clipboard.GetText();
            foreach (var e in CharMappings){
              s = s.Replace(e.Key, e.Value);
            }                
            Clipboard.SetText(s);
        }
        base.WndProc(ref m);
    }
}
//Then hook it up like this (place in your form constructor)
new NativeTextBox(dict).AssignHandle(textBox1.Handle);
于 2013-11-02T20:49:03.953 回答