如何将角色更改为另一个角色

时间:2014-01-28 11:09:27

标签: c# wpf textbox char ascii

我想知道如何将用户在常用文本框中输入的字符更改为另一个字符

例如:

如果用户在文本框中键入“ A ”,我想让程序输入“ B

如果用户在文本框中键入“ N ”,我希望程序输入“ M

如果用户在文本框中输入“ Y ”,我想让程序输入“ S

所以..

所以当用户输入“ ANY ”时,我需要文本框中的文字为“ BMS

我已经从Custom TextBox Control that Switches Keyboard Language Automatically c# WPF

解决了这个问题

4 个答案:

答案 0 :(得分:1)

您需要实现文本框的OnTextChanged / TextChanged事件(这取决于您是使用win表单还是.net)。

您可以使用文本框的Text值访问文本框的当前值。

您需要保存旧值以进行比较,以便跟踪已更改的字符。

答案 1 :(得分:1)

如果您使用的是Visual Studio,请创建一个文本框并双击它。然后会显示一个方法,并插入以下代码:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text == "ANY")
            textBox1.Text = "BMS";
    }

该方法检查您的文本框是否包含字符串“ANY”并将其更改为“BMS”。 您也可以更改此方法,以便更改您编写的每个字母的字母。例如:

A -> B
BN -> BM
BMY -> BMS

这会让人感觉这个词在被写入时会改变,而不是在写完整个单词时。

答案 2 :(得分:1)

首先创建一个字典,其中包含有关此内容的更改内容的信息

Dictionary<string, string> myDict = new Dictionary<string, string>
{
    {"A", "B"},
    {"N", "M"},
    {"Y", "S"},            
};

您可以通过覆盖自定义类中的OnTextInput方法来实现。因此,您自己的自定义类的完整代码将是

namespace WpfApplication
{
    public class MyTextBox : TextBox
    {
        Dictionary<string, string> myDict = new Dictionary<string, string>
        {
            {"A", "B"},
            {"N", "M"},
            {"Y", "S"},            
        };

        protected override void OnTextInput(TextCompositionEventArgs e)
        {
            string str;
            if (myDict.TryGetValue(e.Text, out str))
            {
                e.Handled = true;
                if (SelectionLength == 0)
                    Text = Text.Insert(CaretIndex, str)
                else
                {
                    SelectedText = str;
                    SelectionLength = 0;
                }

                CaretIndex += Text.Length;
            }

            base.OnTextInput(e);
        }
    }
}

答案 3 :(得分:0)

试试这个。它可以解决你的问题。

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        string finalValue;
        if (!String.IsNullOrEmpty(textBox1.Text))
        {

            byte[] ascii = Encoding.ASCII.GetBytes(textBox1.Text);

            List<byte> newB = new List<byte>();
            foreach (byte b in ascii)
            {
                byte s = b;
                s++;
                newB.Add(s);
            }

            finalValue = Encoding.ASCII.GetString(newB.ToArray());
        }
    }