为文本框创建字符分隔符
Creating a character separator for a textbox
我正在为上大学做更多的准备,现在有点卡住了。我正在尝试在输入时使用短划线 ('-'
) 勾勒出文本框中的十六进制值,因此应该动态完成。
更准确地说,这里有一些我正在尝试做的图片:
如果我像这样输入十六进制:
我希望它们在我输入时得到分隔符:
到目前为止,我已经尝试用 for 循环来完成它,我认为它应该已经成功了,但它没有打印出我的值,而只是没有文本的破折号。
这里是代码位:
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;
}
}
}
}
一种方法是在文本更改时验证整个字符串。这将解释粘贴文本和键入。这有点野蛮,但对于相对较短的字符串来说,它应该可以完成工作:
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;
}
}
}
我正在为上大学做更多的准备,现在有点卡住了。我正在尝试在输入时使用短划线 ('-'
) 勾勒出文本框中的十六进制值,因此应该动态完成。
更准确地说,这里有一些我正在尝试做的图片:
如果我像这样输入十六进制:
我希望它们在我输入时得到分隔符:
到目前为止,我已经尝试用 for 循环来完成它,我认为它应该已经成功了,但它没有打印出我的值,而只是没有文本的破折号。
这里是代码位:
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;
}
}
}
}
一种方法是在文本更改时验证整个字符串。这将解释粘贴文本和键入。这有点野蛮,但对于相对较短的字符串来说,它应该可以完成工作:
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;
}
}
}