C#TextBox覆盖箭头键选择功能

时间:2015-05-21 02:29:28

标签: c# textbox

基本上,从question继续,当用户向左或向右按​​shift +时,我需要它来选择整个字符组。

我当前的代码(在PreviewKeyDown事件下):

string s;
int caretLocation = textBox1.SelectionStart;
string txt = textBox1.Text;
if (e.Shift) 
{
    switch (e.KeyCode)
    {
        #region Right
        case Keys.Right:
            {
                s = txt.Substring(caretLocation);
                foreach (string combo in charCombinations)
                {
                    if (s.StartsWith(combo))
                    {
                        textBox1.SelectionLength = 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;
                        textBox1.SelectionLength = combo.Length + 1
                        break;
                    }
                }
                break;
            }
        #endregion
    }
}

第一个问题在于右键,如果一行中有两个这样的字符组,则插入符号不会从下面显示的位置向右移动:

enter image description here

第二个问题在于左键,左键选择只是没有选择整个字符:

enter image description here

对于这种情况,应选择整个单词sin(

提前致谢!

charCombinations已被定义为:

    private static readonly string[] charCombinations = new string[] { "asinh(", "acosh", "atanh(",
        "sinh(", "cosh(", "tanh(", "asin(", "acos(", "atan(", "sin(", "cos(", "tan(", 
        "log(", "ln(", "PI", "e", "Phi"};

1 个答案:

答案 0 :(得分:0)

您必须将下一个文字长度添加到之前的长度。

我修改了这个模型的代码:

        case Keys.Right:
        {
            s = txt.Substring(caretLocation);

            foreach (string combo in charCombinations)
            {
                if (s.StartsWith(combo))
                {
                    textBox1.SelectionLength += combo.Length - 1;
                    break;
                }
            }
            break;
        }

重要的一行是:textBox1.SelectionLength += combo.Length - 1;

我使用+=代替=