自动完成字符为(和}

本文关键字:字符 | 更新日期: 2023-09-27 18:09:15

我正在开发一个简单的文本编辑器,我有麻烦做自我添加一些字符…我做了下面的示例代码,我在做什么…当我输入字符时,它不会在当前光标位置添加相应的字符....

另一个疑问,当我再次输入时,我如何使程序忽略添加的字符…??

Dictionary<char, char> glbin = new Dictionary<char, char>
{
    {'(', ')'},
    {'{', '}'},
    {'[', ']'},
    {'<', '>'}
};
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    int line = textBox1.GetLineFromCharIndex(textBox1.SelectionStart);
    int column = textBox1.SelectionStart - textBox1.GetFirstCharIndexFromLine(line);
    if(glbin.ContainsKey(e.KeyChar))
        textBox1.Text.Insert(column, glbin[e.KeyChar].ToString());
}

自动完成字符为(和}

String是不可变对象,对Text属性的Insert调用会产生新的String实例,该实例不会被分配到任何地方。

和忽略char你需要设置keypressevenargs Handled属性为true(你可能需要关闭字符的逆字典)。

你需要把你的代码改成:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    int index = textBox1.SelectionStart;
    if(glbin.ContainsKey(e.KeyChar))
    {
      var txt = textBox1.Text; // insert both chars at once
      textBox1.Text = txt.Insert(index, e.KeyChar + glbin[e.KeyChar].ToString());
      textBox1.Select(index + 1, 0);// position cursor inside brackets
      e.Handled = true;
    }
    else if (glbin.Values.Contains(e.KeyChar))
    {
      // move cursor forward ignoring typed char
      textBox1.SelectionStart = textBox1.SelectionStart + 1;
      e.Handled = true;
    }
}