我想創建某種類型的許可證驗證文本框,自動將用戶輸入拆分爲由連字符分隔的塊。我的執照是25個字符長,而且分開,例如:解析用戶輸入作爲用戶鍵入WinForms文本框控件
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
我想出了下面的代碼來分析用戶的輸入,而他是打字或通過複製/粘貼通過處理TextChanged
事件TextBox控件像這樣的:
public static string InsertStringAtInterval(string source, string insert, int interval)
{
StringBuilder result = new StringBuilder();
int currentPosition = 0;
while (currentPosition + interval < source.Length)
{
result.Append(source.Substring(currentPosition, interval)).Append(insert);
currentPosition += interval;
}
if (currentPosition < source.Length)
{
result.Append(source.Substring(currentPosition));
}
return result.ToString();
}
private bool bHandlingChangeEvent = false;
private void txtLicense_TextChanged(object sender, EventArgs e)
{
if (bHandlingChangeEvent == true)
return;
bHandlingChangeEvent = true;
string text = txtLicense.Text.Replace("-", "").Replace(" ","");
int nPos = txtLicense.SelectionStart;
if((text.Length==5||text.Length==10||text.Length==15||text.Length==20) && txtLicense.Text[txtLicense.Text.Length-1]!='-')
{
txtLicense.Text += "-";
txtLicense.SelectionStart = nPos + 1;
}
if(text.Length>=25)
{
string tmp = text.Substring(0, 25);
tmp = InsertStringAtInterval(tmp, "-", 5);
txtLicense.Text = tmp;
txtLicense.SelectionStart = nPos;
}
bHandlingChangeEvent = false;
}
雖然這是正常使用時,我的用戶類型和箱內膏。我唯一的問題是,當用戶試圖通過按退格鍵或刪除鍵從輸入的鍵中刪除字符時。
由於強制連字符插入@位置5,10,15,20,一旦用戶在退格按下這些標記之一時,按上述邏輯強制連字符添加到字符串,並且用戶不能超出該範圍。
我試着擺弄KeyDown事件,但不能拿出任何有用的東西。有人可以幫忙嗎?
我也嘗試過使用MaskedTextbox,但那件事很醜陋,因爲我不想讓遮罩/連字符在焦點上可見,我當然不想用空格替換提示,因爲它會給一些混淆當在盒子內部點擊時,由於當其「假定」爲空時,光標不會始終位於盒子的開始處。
會[MaskedTextBox](http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx)有幫助嗎? – publicgk 2013-03-06 15:23:39
我剛剛編輯了我關於那個問題,因爲我以爲有人會提到它..檢查我的問題的結束 – 2013-03-06 15:24:13
@DJKRAZE不知道你在瞄準什麼..你能在代碼中解釋也許 – 2013-03-06 17:32:43