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("閉", "}");
如果不确定是否永远不会发送单个字符,请使用不太可能的字符序列作为代理,可能来自不同的字母,如閉©ξ