gpt4 book ai didi

c# - C# TextBox 中的负数

转载 作者:行者123 更新时间:2023-11-30 15:33:31 28 4
gpt4 key购买 nike

我已经完成了这里的问题,并找到了使文本框只接受以一位小数和开头为负号的数值的答案。

    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '-')
{
e.Handled = true;
}

// only allow one decimal point
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
e.Handled = true;
}

if (e.KeyChar == '-' && (sender as TextBox).Text.Length > 0)
{
e.Handled = true;
}

但是我确实有一个问题。假设用户输入了一个数字:

123455789764

然后他意识到这个数字是负数。他回到开头,试图输入负号,却发现打不通。有没有办法解决这个问题,而不是让用户删除他输入的数字,添加负数并再次重新输入数字?

最佳答案

试试这个:

Regex reg = new Regex(@"^-?\d+[.]?\d*$");
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsControl(e.KeyChar)) return;
if (!reg.IsMatch(textBox1.Text.Insert(textBox1.SelectionStart, e.KeyChar.ToString()) + "1")) e.Handled = true;
}

对于 keyboardP 的建议,我添加这段代码以完全防止非数字值,我认为你应该尝试 TextBox.ShortcutsEnabled = false; 因为我认为用户不需要任何类型的复制和粘贴数值数据。

    Regex reg = new Regex(@"^-?\d+[.]?\d*$");
bool textChangedByKey;
string lastText;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsControl(e.KeyChar)) return;
if (!reg.IsMatch(textBox1.Text.Insert(textBox1.SelectionStart, e.KeyChar.ToString()) + "1"))
{
e.Handled = true;
return;
}
textChangedByKey = true;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (!textChangedByKey)
{
if (!reg.IsMatch(textBox1.Text))
{
textBox1.Text = lastText;
return;
}
}
else textChangedByKey = false;
lastText = textBox1.Text;
}

我试过使用Undo() 方法和一些重置SelectedText,但是它有点不好,即使是上面的方式也没有带来良好的视觉效果(当尝试将文本粘贴到数字文本框中时,您可以看到文本发生变化并恢复为有效值。

关于c# - C# TextBox 中的负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466575/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com