Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “如何发送”;{};在SendKeys中_C#_Winforms - Fatal编程技术网

C# “如何发送”;{};在SendKeys中

C# “如何发送”;{};在SendKeys中,c#,winforms,C#,Winforms,我正在尝试使用SendKeys.send()发送“{”和“}” 我已经尝试使用string.Replace{{{,{{}} txt=txt.Replace(“{”,“{}”); txt=txt.Replace(“}”,即“{}”); SendKeys.Send(txt); 我希望它发送“{”和“}”,但程序抛出了一个错误 System.FormatException 正如其他人指出的,您的第二个Replace,替换了第一个Replace添加的大括号 要转义字符串中的大括号,可以使用Regex如

我正在尝试使用
SendKeys.send()发送“{”和“}”

我已经尝试使用
string.Replace{{{,{{}}

txt=txt.Replace(“{”,“{}”);
txt=txt.Replace(“}”,即“{}”);
SendKeys.Send(txt);
我希望它发送“{”和“}”,但程序抛出了一个错误

System.FormatException


正如其他人指出的,您的第二个
Replace
,替换了第一个
Replace
添加的大括号

要转义字符串中的大括号,可以使用
Regex
如下所示:
SendKeys.Send(Regex.Replace(txt,@“[/{/}]”,m=>string.Format(“{{{0}}}”,m.Value));

或者更好地转义在该上下文中具有特殊意义的所有字符,即
Regex.Replace(txt,@“[/{/}/+/%/~/(/)]”,m=>string.Format(“{{{0}}”,m.Value))

另一个完全不同的选项是一次发送一个字符,必要时转义大括号:

"some{}text".ToCharArray().ToList()
   .ForEach(a=> SendKeys.Send(a == '}' || a == '{' ? "{"+a+"}": a.ToString()));

正如其他人指出的,您的第二个
Replace
,替换了第一个
Replace
添加的大括号

要转义字符串中的大括号,可以使用
Regex
如下所示:
SendKeys.Send(Regex.Replace(txt,@“[/{/}]”,m=>string.Format(“{{{0}}}”,m.Value));

或者更好地转义在该上下文中具有特殊意义的所有字符,即
Regex.Replace(txt,@“[/{/}/+/%/~/(/)]”,m=>string.Format(“{{{0}}”,m.Value))

另一个完全不同的选项是一次发送一个字符,必要时转义大括号:

"some{}text".ToCharArray().ToList()
   .ForEach(a=> SendKeys.Send(a == '}' || a == '{' ? "{"+a+"}": a.ToString()));

我会使用不同的变量来保存整个字符串:

var txt = "asdf{}Asdf";
            var newString = new StringBuilder();
            for (int i = 0; i < txt.Length; i++)
            {
                if (txt[i] == '{')
                    newString.Append("{{}");
                else if(txt[i] == '}')
                    newString.Append("{}}");
                else
                    newString.Append(txt[i]);
            } 
            SendKeys.Send(newString.ToString());
var txt=“asdf{}asdf”;
var newString=newstringbuilder();
for(int i=0;i
我会使用不同的变量来保存整个字符串:

var txt = "asdf{}Asdf";
            var newString = new StringBuilder();
            for (int i = 0; i < txt.Length; i++)
            {
                if (txt[i] == '{')
                    newString.Append("{{}");
                else if(txt[i] == '}')
                    newString.Append("{}}");
                else
                    newString.Append(txt[i]);
            } 
            SendKeys.Send(newString.ToString());
var txt=“asdf{}asdf”;
var newString=newstringbuilder();
for(int i=0;i

以下是相关位:

加号(+)、插入符号(^)、百分号(%)、波浪号(~)和 括号()对SendKeys有特殊的含义 将这些字符括在大括号({})内 指定加号,使用“{+}”。要指定大括号字符,请使用 “{}”和“{}}”。括号([])对SendKeys没有特殊意义, 但你必须用大括号把它们围起来

您的解决方案的问题是您需要进行两次单独的替换

取输入字符串“{”

我很确定有比这更优雅的解决方案,但您可以尝试以下方法:

var sb = new StringBuilder(txt.Length);
for(var i = 0; i < txt.Length; i++)
{
    var c = txt[i];
    switch (c)
    {
      case '+':
      case '^':
      case '%':
      case '~':
      case '(':
      case ')':
      case '[':
      case ']':
      case '{':
      case '}':
        sb.Append('{');
        sb.Append(c);
        sb.Append('}');
        break;
      default:
        sb.Append(c);
        break;
    }
}
SendKeys.Send(sb.ToString());
var sb=新的StringBuilder(txt.Length);
对于(变量i=0;i

编辑使用开关和for扩展转义,以说明其他可转义字符。

以下是相关位:

加号(+)、插入符号(^)、百分号(%)、波浪号(~)和 括号()对SendKeys有特殊的含义 将这些字符括在大括号({})内 指定加号,使用“{+}”。要指定大括号字符,请使用 “{}”和“{}}”。括号([])对SendKeys没有特殊意义, 但你必须用大括号把它们围起来

您的解决方案的问题是您需要进行两次单独的替换

取输入字符串“{”

我很确定有比这更优雅的解决方案,但您可以尝试以下方法:

var sb = new StringBuilder(txt.Length);
for(var i = 0; i < txt.Length; i++)
{
    var c = txt[i];
    switch (c)
    {
      case '+':
      case '^':
      case '%':
      case '~':
      case '(':
      case ')':
      case '[':
      case ']':
      case '{':
      case '}':
        sb.Append('{');
        sb.Append(c);
        sb.Append('}');
        break;
      default:
        sb.Append(c);
        break;
    }
}
SendKeys.Send(sb.ToString());
var sb=新的StringBuilder(txt.Length);
对于(变量i=0;i

Edit使用开关和for扩展转义,以说明其他可转义字符。

{
必须通过
{}
}
转义,必须通过
{}
转义。此转义尝试

// NON-WORKING EXAMPLE!
txt = txt.Replace("{", "{{}");
txt = txt.Replace("}", "{}}");
…有一个问题,第一次替换引入的右大括号会被第二次替换再次转义

{  -->  {{}  -->  {{{}}
这是错误的。为了避免将转义大括号精确地作为转义大括号引入,请在第一次替换中为结束的转义大括号使用代理字符。例如,某些汉字
,假设您永远不想发送此字符

txt = txt.Replace("{", "{{閉");
txt = txt.Replace("}", "{}}");
// After having done the escape, replace the surrogate by the closing brace again.
txt = txt.Replace("閉", "}");
如果不确定是否永远不会发送单个字符,请使用不太可能的字符序列作为代理,可能来自不同的字母,如
閉©ξ