我正在为大学做更多的准备工作,现在有点困难。我正在尝试使用破折号('-'
)在文本框中创建十六进制值,因此我在键入时应该动态完成。
为了更加精确,这里有一些我想要做的图片:
如果我输入这样的字符:
我希望他们在输入分隔符时显示分隔符:
到目前为止,我已尝试使用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;
}
}
}
}
答案 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;
}
}
}