gpt4 book ai didi

c# - 自动完成字符为 ( 和 }

转载 作者:行者123 更新时间:2023-11-30 20:48:44 24 4
gpt4 key购买 nike

我正在开发一个简单的文本编辑器,我在自己添加一些字符时遇到了问题......我做了以下示例代码,我在做什么......当我输入字符时,它不会在当前光标位置添加其对应的字符....

又一个疑问,如何让程序忽略我再次输入时添加的字符...??

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 是不可变对象(immutable对象),对 Text 属性的 Insert 调用会产生新的 string 实例,该实例不会在任何地方赋值。

要忽略字符,您需要将 KeyPressEventArgs 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;
}
}

关于c# - 自动完成字符为 ( 和 },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com