2013-04-12 65 views
-1

我想使用SendKeys.Send-Methode「{」和「}」SendKeys.Send-Methode轉換器

{}有特殊含義。儘管我的文字包含{}

所以我想先轉換我的文本。我想過這樣的事情:

static void Main(string[] args) 
    { 
     string text = "blub{ibu{blab}blab"; 
     Console.WriteLine(text); 
     Console.WriteLine(convertForSendKey(text)); 
     Console.ReadKey(); 
    } 

    public static string convertForSendKey(string password) 
    { 
      if (password.Contains('{')) 
      { 
       string[] parts = password.Split('{'); 
       string tmp = parts[0]; 
       for (int i = 1; i < parts.Length; i++) 
       { 
        tmp += "{{}" + parts[i]; 
       } 
       password = tmp; 
      } 
      if (password.Contains('}')) 
      { 
       string[] parts2 = password.Split('}'); 
       string tmp2 = parts2[0]; 
       for (int i = 1; i < parts2.Length; i++) 
       { 
        tmp2 += "{}}" + parts2[i]; 
       } 
       password = tmp2; 
      } 
      return password; 
    } 

當然它不會像工作,因爲在第二if將所有{{}部分轉換爲好,這是不應該的。

+0

你期望得到什麼結果? – Middas

回答

0

也許是這樣的:

static string EscapeChar(char c) 
{ 
    switch (c) 
    { 
     case '{': 
      return "{{}"; 
     case '}': 
      return "{}}"; 
     default: 
      return c.ToString(); 

    } 
} 

public static string ConvertForSendKey(string password) 
{ 
    return String.Concat(password.Select(EscapeChar)); 
} 

如果它的工作原理,它首先使用LINQ擴展方法Select到項目的每個字符到其相關的字符串。然後它使用Concat將所有短串粘合在一起。

+0

謝謝你,這個技巧;-) –

+0

'string.Replace'的速度要快得多... – AgentFire

+0

@AgentFire但問題是我們需要在一次運行中執行_two_替換。這就是爲什麼我'string.Replace'不容易使用。 –

0

嘗試使用該符號逃逸{{\{。爲}}\}

同樣的事情,而且,你有字符替換一個壞的代碼。 嘗試使用string.Replace

string one = "abc"; 
string two = one.Replace("c", " dd"); 

// two is "ab dd". 
+0

要指定大括號字符,請使用「{{}」和「{}}」。 從:http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx 它工作正常的第一個IF,但然後我有「{{}」在字符串,將在第二個IF中轉換爲「{{{}}」,這不是應該發生的掃描... –