自动完成字符为(和}
本文关键字:字符 | 更新日期: 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;
}
}