2014-01-28 32 views
0

我想知道如何改變一個字符,用戶鍵入一個通常文本框到另一個字符如何改變一個字符到另一個字符

例如:

如果用戶鍵入「」在文本框,我想節目輸入「

並且如果在用戶鍵入「ñ文本框,我想程序鍵入「中號

,如果用戶鍵入「Ÿ」在文本框,我想程序鍵入「小號

而且所以..

所以,當用戶鍵入「ANY」我需要在文本框中的文本是「BMS

我從Custom TextBox Control that Switches Keyboard Language Automatically c# WPF

+0

其實我有種初學者,我不知道我應該做的是基於您的其他問題 –

+1

做,它看起來像你想創建一個特定於語言的文本框,例如在其中鍵入一個Q將插入一個,輸入一個W將生成一個ص,依此類推。阿拉伯語的輸入法不是更適合嗎? –

回答

1

首先創建一個包含有關如何處理改變信息的字典,什麼這樣

Dictionary<string, string> myDict = new Dictionary<string, string> 
{ 
    {"A", "B"}, 
    {"N", "M"}, 
    {"Y", "S"},    
}; 

你可以簡單地做,通過在自己的自定義類中重寫OnTextInput方法。所以,你爲自己的自定義類完整代碼將

namespace WpfApplication 
{ 
    public class MyTextBox : TextBox 
    { 
     Dictionary<string, string> myDict = new Dictionary<string, string> 
     { 
      {"A", "B"}, 
      {"N", "M"}, 
      {"Y", "S"},    
     }; 

     protected override void OnTextInput(TextCompositionEventArgs e) 
     { 
      string str; 
      if (myDict.TryGetValue(e.Text, out str)) 
      { 
       e.Handled = true; 
       if (SelectionLength == 0) 
        Text = Text.Insert(CaretIndex, str) 
       else 
       { 
        SelectedText = str; 
        SelectionLength = 0; 
       } 

       CaretIndex += Text.Length; 
      } 

      base.OnTextInput(e); 
     } 
    } 
} 
+1

看起來像一個很好的解決方案,但有幾個問題:'AppendText(str)'不考慮當前的CaretIndex,所以應該是'Text = Text.Insert(CaretIndex,str)'。這也需要一種不同的方式來更新CaretIndex - 設置Text明顯地將CaretIndex重置爲0,所以我們需要在設置Text屬性之前存儲原始值,然後將'CaretIndex = Text.Length'替換爲CaretIndex = originalCaretIndex + str.Length'。 –

1

解決了這個問題你需要實現文本框的OnTextChanged/TextChanged事件(這取決於你是否在做贏形式或.net)。

您可以使用文本框的Text值來訪問文本框的當前值。

您需要保存舊值才能進行比較,以便您可以跟蹤已更改的字符。

1

如果您使用Visual Studio,請創建一個文本框並雙擊它。隨後的方法顯示出來,並插入下面的代碼:

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (textBox1.Text == "ANY") 
      textBox1.Text = "BMS"; 
    } 

的方法檢查,如果您的文本包含字符串「ANY」並將其更改爲「BMS」。 你也可以改變這種方法,以便改變你寫的每一個字母的字母。例如:

A -> B 
BN -> BM 
BMY -> BMS 

這會讓人感覺到單詞在寫入時發生變化,而不是整個單詞被寫入時。

+0

但我不知道用戶會寫的字我把一個簡單的例子上面.....我需要給每個字符,用戶可以在鍵盤上鍵入另一個「價值」,添加到文本框 –

+0

但你總是想把文本改成「BMS」嗎? –

+0

不,它取決於用戶類型的文本 –

0

試試這個。它可以解決你的問題。

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     string finalValue; 
     if (!String.IsNullOrEmpty(textBox1.Text)) 
     { 

      byte[] ascii = Encoding.ASCII.GetBytes(textBox1.Text); 

      List<byte> newB = new List<byte>(); 
      foreach (byte b in ascii) 
      { 
       byte s = b; 
       s++; 
       newB.Add(s); 
      } 

      finalValue = Encoding.ASCII.GetString(newB.ToArray()); 
     } 
    } 
+0

爲什麼另一個列表+調用ToArray()而不是修改ascii數組? –

相關問題