2017-06-13 33 views
0

我正在爲大學做更多準備工作,現在有點卡住了。我正在嘗試使用破折號('-')在文本框中創建十六進制值,而我正在鍵入,因此應該動態完成。爲文本框創建一個字符分隔符

要多一點的確切位置是什麼,我試圖做一些圖片:

如果我打字不吉利的東西是這樣的:

image1

我希望他們能夠分離破折號而我打字他們:

image2

到目前爲止,我已經試着用做它的循環,我認爲它應該已經解決,但它不打印我的價值觀,而只是破折號文本。

以下是代碼位:

int i = 0; 
     private void inputBox_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if (hexRadioButton.Checked) 
      { 
       if (!char.IsControl(e.KeyChar)) 
       { 
        if (i < 2) 
        { 
         i++; 
         e.Handled = true; 
        } 

        else 
        { 
         i = 0; 
         inputBox.AppendText("-"); 
         e.Handled = true; 
        } 
       } 
      } 
    } 
+0

如果他們將字符粘貼到框中,你想要做什麼? –

+0

如果這是Windows窗體(請標記你的問題),你正在尋找[MaskedTextBox](https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox(v = vs.110) .aspx) –

+0

我剛剛添加了標籤。謝謝! –

回答

0

一個辦法是,以驗證整個字符串任何時候文本更改。這將解釋粘貼文字以及打字。這是一個有點粗暴,但對於一個相對較短的字符串它應該做的工作:

private void inputBox_TextChanged(object sender, EventArgs e) 
{ 
    if (hexRadioButton.Checked) 
    { 
     var allowedValues = new[] 
     { 
      'A', 'B', 'C', 'D', 'E', 'F', 
      'a', 'b', 'c', 'd', 'e', 'f', 
      '1', '2', '3', '4', '5', '6', 
      '7', '8', '9', '0', '-' 
     }; 

     var validString = new StringBuilder(); 
     var validChrIndex = 1; 

     for (int i = 1; i <= inputBox.TextLength; i++) 
     { 
      var chr = inputBox.Text[i - 1]; 

      if (!allowedValues.Contains(chr)) continue; 

      if (validChrIndex % 3 == 0) 
      { 
       if (chr != '-') 
       { 
        validString.Append('-'); 
        validChrIndex++; 
       } 
      } 
      else if (chr == '-') 
      { 
       continue; 
      } 

      validString.Append(chr); 
      validChrIndex++; 
     } 

     if (!validString.ToString().Equals(inputBox.Text)) 
     { 
      inputBox.Text = validString.ToString(); 
      inputBox.SelectionStart = inputBox.TextLength; 
     } 
    } 
} 
+0

Brutish很好。因爲它更明確,可以讓我學習引擎蓋下發生的事情。 –

相關問題