您好我想让文本框输入mac地址,每2个字符我想自动添加':'
我想使用TextChanged事件
private void MacAdressTextBox_TextChanged(object sender, TextChangedEventArgs e) {
if (MacAdressTextBox.Text.Length > 2)
MacAdressTextBox.Text += ":";
}
这里我补充说:输入2个字符但是在这2个字符之后,应用程序会放松......不知道为什么有任何帮助?
答案 0 :(得分:0)
MacAdressTextBox_TextChanged
时。MacAdressTextBox_TextChanged
中更改文字。您的文字更改会导致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; }
}