输入到文本框Windows Phone 8中的每2个字符添加字符

时间:2014-10-24 10:08:24

标签: c# windows-phone-8

您好我想让文本框输入mac地址,每2个字符我想自动添加':'

我想使用TextChanged事件

    private void MacAdressTextBox_TextChanged(object sender, TextChangedEventArgs e) {
        if (MacAdressTextBox.Text.Length > 2)
            MacAdressTextBox.Text += ":";
    }

这里我补充说:输入2个字符但是在这2个字符之后,应用程序会放松......不知道为什么有任何帮助?

2 个答案:

答案 0 :(得分:0)

  1. 触发文字更改MacAdressTextBox_TextChanged时。
  2. MacAdressTextBox_TextChanged中更改文字。
  3. 见第1步
  4. 您的文字更改会导致MacAdressTextBox_TextChanged无限递归。

答案 1 :(得分:0)

一种方法是抓取文本,删除冒号,然后将它们添加回正确的位置。为了防止应用程序挂起无休止的递归循环,您可以添加一个变量来跟踪我们的代码或用户是否更改了文本。

例如:

// When this is true it means our code is changing the text
private bool updatingTextWithCode = false;

private void MacAdressTextBox_TextChanged(object sender, EventArgs e)
{
    if (updatingTextWithCode)
    {
        // Our code is doing the update, so just reset the variable
        updatingTextWithCode = false;
    }
    else
    {
        // The user is updating the text, so process the contents
        var newText = "";

        // Store the mac address without the ':' characters
        var plainText = MacAdressTextBox.Text.Replace(":", "");

        // Then add ':' characters in correct positions to 'newText'
        for (int i = 1; i <= plainText.Length; i++)
        {
            newText += plainText[i - 1];
            if (i % 2 == 0) newText += ":";
        }

        // Set our global variable and update the text
        updatingTextWithCode = true;
        MacAdressTextBox.Text = newText;
        MacAdressTextBox.Select(MacAdressTextBox.TextLength, 0);
    }            
}

UPDATE :CodeCaster正确地指出此代码不允许用户通过冒号退格。解决此问题的一种方法是添加以下事件处理程序:

private void MacAdressTextBox_KeyDown(object sender, KeyEventArgs e)
{
    // Disable formatting code when backspacing
    if (e.KeyCode == Keys.Back) { updatingTextWithCode = true; }
}