C# 发送密钥特殊字符(){}+^c

C# 发送密钥特殊字符(){}+^c,c#,character,sendkeys,C#,Character,Sendkeys,好的,我正在制作一个自动打字机,我希望用户能够输入{}^+键,并将应用程序输出。我知道您需要格式化符号,如SendKeys.Send{^};但是我不能让它工作。这是我到目前为止的计时器滴答声。另外,我还有全局int blockCount,它告诉程序转到blockText字符串中的下一个字符。 它返回不平衡的组分隔符 private void timer3_Tick(object sender, EventArgs e) { string blockText = ric

好的,我正在制作一个自动打字机,我希望用户能够输入{}^+键,并将应用程序输出。我知道您需要格式化符号,如SendKeys.Send{^};但是我不能让它工作。这是我到目前为止的计时器滴答声。另外,我还有全局int blockCount,它告诉程序转到blockText字符串中的下一个字符。 它返回不平衡的组分隔符

  private void timer3_Tick(object sender, EventArgs e)
    {
        string blockText = richTextBox1.Text;

        int blockLength = richTextBox1.TextLength;
        btrand = RandomNumber(75, 200); //I have a method to make a rand num
        timer3.Interval = btrand;
        char[] specialChars = { '{', '}', '(', ')', '+','^' };
        foreach (char letter in blockText)
        {
            for (int i = 0; i < specialChars.Length; i++)
            {
                if (letter == specialChars[i])
                {
                    SendKeys.Send("{" + specialChars[i] + "}");
                    blockText.Remove(blockText.IndexOf(specialChars[i].ToString()));
                }
                else
                {
                    SendKeys.Send(letter.ToString());
                }
            }

        }
        blockCount++;
        if (blockCount >= blockLength)
        {
            blockCount = 0;
        }

    }

好的,快速分析,如果我遗漏了什么,请原谅

您正在使用blockText作为集合执行foreach,并在找到特殊字符时对其进行操作。这可能很混乱;我会考虑另一种方法来实现这一点。 你在所有特殊字符之间循环,对于你无法识别匹配项的每一次交互,你都在发送当前信件。这意味着您将发送specialChars数组中元素数减去1的所有非特殊字符。我不认为你打算这么做。 我建议采取如下实施方式:

    foreach (char letter in blockText)
    {
        bool _specialCharFound = false;

        for (int i = 0; i < specialChars.Length; i++)
        {
            if (letter == specialChars[i])
            {
                _specialCharFound = true;
                break;
            }
        }

        if (_specialCharFound)
            SendKeys.Send("{" + letter.ToString() + "}");
        else
            SendKeys.Send(letter.ToString());
    }

有更多的优化方法可以实现,但我会选择这一种,因为目的明确,并且与您的原始代码相似。

无法实现这一点是对您的问题的绝对糟糕的描述。对不起,您的权利。它返回的组分隔符不平衡。在哪一行,使用哪一个输入?SendKeys很糟糕。请看我的回答:你能给我一些建议或者我可以用不同的方式来做这件事的方法吗?它很有效,谢谢你的帮助,我从来没有想过使用boolYou're welcome。我们的想法是使用布尔值作为标志,指示是否在specialChars集合中找到匹配项。@user2692560,您是新手。请务必阅读此建议。。。