2013-08-17 40 views
0

好吧,我正在製作一個自動打字機,我希望用戶能夠輸入鍵{}()^ +並將應用程序輸出。我知道你需要格式化符號SendKeys.Send({^});但我不能讓這個工作。下面是我的定時器勾號。此外,我有全局int blockCount,它告訴程序移動到blockText字符串中的下一個字符。
它返回「組分隔符不平衡」。發送鍵特殊字符(){} +^c#

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; 
     } 

    } 
+0

「不能得到這個工作」是一個*絕對可怕的*描述你的問題。 –

+0

對不起,你的權利。它返回「組分隔符不平衡」。 – user2692560

+0

在哪一行輸入? –

回答

0

好吧,快速分析,所以原諒我,如果我錯過了什麼。

  • 你做得使用blockText爲您收集的foreach,如果一個特殊的字符被發現操縱它。這可能是凌亂的;我想用另一種方式來實現這一點。
  • 您正在循環所有特殊字符,並且對於每個不能識別您發送當前字母的匹配的交互。這意味着您將重新發送所有非特殊字符以減少數組中specialChars數組中的元素數量。我不認爲這就是你打算做的。

我建議這樣的實現:

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()); 
    } 

有實現更優化的方式,但我會選擇這一個目的,相似的清晰度你原來的代碼。

+0

你可能會給我一些建議或方式,我可以做到這一點不同? – user2692560

+0

當然 - 只是編輯我的文章,包括源代碼。 – OnoSendai

+0

它的工作原理,感謝您的幫助,我從來沒有想過使用bool – user2692560