仅允许数字和连字符在文本框中声明负数

时间:2014-10-12 00:04:52

标签: c# regex winforms

我试图让文本框只允许数字和连字符声明一个负数但是我研究并试图复制我发现的东西并且它不起作用。也许我错过了一些东西,但我不知道正则表达式,所以也许它错了。但它没有更新和接受字母和其他字符

Regex reg = new Regex(@"^[0-9-]*$");
bool textChangedByKey;
string lastText;
private void Team1Q1_KeyPress(object sender, KeyPressEventArgs e)
{
    TextBox senderTB = sender as TextBox;
    if (char.IsControl(e.KeyChar)) return;
    if (!reg.IsMatch(senderTB.Text.Insert(senderTB.SelectionStart, e.KeyChar.ToString()) + "1"))
    {
        e.Handled = true;
        return;
    }
    textChangedByKey = true;
}

private void Team1Q1_TextChanged(object sender, EventArgs e)
{
    OnTeamInfoChanged();
    TextBox senderTB = sender as TextBox;
    if (!textChangedByKey)
    {
        if (!reg.IsMatch(senderTB.Text))
        {
        return;
        }                
    }
    else 
    {
       textChangedByKey = false;
       lastText = senderTB.Text;
    }

}

1 个答案:

答案 0 :(得分:0)

将正则表达式模式更改为^-?[0-9]*$只允许单个连字符,并且仅在输入的开头。

在设计器类中连接KeyPress事件处理程序会导致不允许的字符被过滤掉:

this.Team1Q1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Team1Q1_KeyPress);`