C#文本框仅允许在字符串开头使用减号(-)

C#文本框仅允许在字符串开头使用减号(-),c#,visual-studio,winforms,textbox,C#,Visual Studio,Winforms,Textbox,很抱歉,如果这是一个非常基本的问题,但我对C#是新手,这是我的第一个windows窗体应用程序 在下面的代码中,我的文本框只接受小数点“,”和减号“-”,数字,它还接受删除键和退格键的输入(如果我错了,请纠正我)。因此,我可以输入和删除数字,如: -12.31 -.31 问题是我还可以输入以下内容: 12- 如果字符串的第一个字符是“-”,是否有办法只输入“-”?我尝试了谷歌,我试图想出一些东西,但似乎没有任何效果 谢谢你抽出时间 private void TextBox_KeyPress(

很抱歉,如果这是一个非常基本的问题,但我对C#是新手,这是我的第一个windows窗体应用程序

在下面的代码中,我的文本框只接受小数点“,”和减号“-”,数字,它还接受删除键和退格键的输入(如果我错了,请纠正我)。因此,我可以输入和删除数字,如:

-12.31
-.31
问题是我还可以输入以下内容:

12-
如果字符串的第一个字符是“-”,是否有办法只输入“-”?我尝试了谷歌,我试图想出一些东西,但似乎没有任何效果

谢谢你抽出时间

private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsDigit(e.KeyChar) && (e.KeyChar != ',') && (e.KeyChar != '-') && (e.KeyChar != (char)8))
        {
            e.Handled = true;
        }
        if ((e.KeyChar == ',') && ((sender as TextBox).Text.IndexOf(',') > -1))
        {
            e.Handled = true;
        }

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

您可以使用
SelectionStart
检查光标的位置:

var textBox = (TextBox)sender;

if (e.KeyChar == '-' && (textBox.SelectionStart !=0 || textBox.Text.Contains("-"))) 
{
  e.Handled = true;
}

您可以使用
SelectionStart
检查光标的位置:

var textBox = (TextBox)sender;

if (e.KeyChar == '-' && (textBox.SelectionStart !=0 || textBox.Text.Contains("-"))) 
{
  e.Handled = true;
}

为什么不使用NumericUpDown控件?它是为数字设计的,可以用于负数。为什么不使用数字上下控件呢?它是为数字设计的,可以用于负数。