【发布时间】:2015-05-12 14:04:55
【问题描述】:
基本上,我在文本框中有 sin( 和 cos( 之类的关键字,我希望它们的行为类似于单个字符。
当我在下面提到整个字符串时,它指的是字符组(例如“sin(”)
以sin(为例:
如果插入符号位于此位置(在s 后面):
如果您按下del,它将删除整个字符串。如果按下右箭头键,插入符号将跳转到 ( 之后。
如果插入符号位于此位置(( 之后):
如果按下backspace,整个字符串将被删除。如果按下左箭头键,插入符号会跳到s 后面。
编辑: 感谢指出这一点的 John Skeet。
选择字符组的任何子字符串(例如,sin( 中的si)应该选择整个字符串。
对不起,如果难以理解,我的想法有点难以用语言表达。
编辑 2: 感谢 Darksheao 为我提供退格键和删除键的答案。我将 delete 段重新定位到 PreviewKeyDown 事件,因为它不适用于 KeyPress 事件。
编辑 3: 使用 charCombinations 的处理方式,这是我对左右键的实现方式:
#region Right
case Keys.Right:
{
s = txt.Substring(caretLocation);
foreach (string combo in charCombinations)
{
if (s.StartsWith(combo))
{
textBox1.SelectionStart = caretLocation + combo.Length - 1;
break;
}
}
break;
}
#endregion
#region Left
case Keys.Left:
{
s = txt.Substring(0, caretLocation);
foreach (string combo in charCombinations)
{
if (s.EndsWith(combo))
{
textBox1.SelectionStart = caretLocation - combo.Length + 1;
break;
}
}
break;
}
#endregion
剩下的就是鼠标实现了。任何人?我还意识到用户可能会使用鼠标将插入符号放在其中一个字符串的中间,因此当发生这种情况时,需要将鼠标移动到字符串的开头。
【问题讨论】:
-
只是一个注释 - 这实际上是 文本框 中的一组字符 - 这是重要的部分。您要修改其行为的对象是文本框,而不是字符串本身。
-
美中不足需要考虑 - 如果用户用鼠标选择“si”会发生什么?
-
感谢您指出这一点。我已经相应地编辑了帖子。
-
您是否有特定的原因希望使用 C# 或 JavaScript 来完成此操作?您使用的是 Winforms 还是 ASP.NET?