C# 文本框按键事件?
我的文本框只允许小数和“+” 它只允许1个小数点“12.332”我需要在“+”之前允许1个小数点,在“+”之后允许1个小数点。例如,我有12.43+12.23,我无法键入12(.),因为我只允许1个小数点,我正在使用拆分方法来获得前后两部分 这是我的密码C# 文本框按键事件?,c#,winforms,textbox,keypress,C#,Winforms,Textbox,Keypress,我的文本框只允许小数和“+” 它只允许1个小数点“12.332”我需要在“+”之前允许1个小数点,在“+”之后允许1个小数点。例如,我有12.43+12.23,我无法键入12(.),因为我只允许1个小数点,我正在使用拆分方法来获得前后两部分 这是我的密码 // checks to make sure only 1 decimal is allowed if (e.KeyChar == 46) { if ((sender as TextBox).Text.IndexOf(e.KeyChar
// checks to make sure only 1 decimal is allowed
if (e.KeyChar == 46)
{
if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1)
e.Handled = true;
}
这就是我的方法
if(textBox1.Text.Contains('+')==true )
{
string Value = textBox1.Text;
string[] tmp = Value.Split('+');
string FirstValu = tmp[1];
string SecValu = tmp[0];
}
如何使用带有事件的方法在“+”之后允许另一个小数位我建议使用正则表达式来验证文本框。我还建议使用textbox验证事件比使用Leave事件更好。以下是在验证事件中使用正则表达式的示例:
private void textBox1_Validating(object sender, CancelEventArgs e)
{
TextBox tbox = (TextBox)sender;
string testPattern = @"^[+-]?[0-9]*\.?[0-9]+ *[+-]? *[0-9]*\.?[0-9]+$";
Regex regex = new Regex(testPattern);
bool isTextOk = regex.Match(tbox.Text).Success;
if (!isTextOk)
{
MessageBox.Show("Error, please check your input.");
e.Cancel = true;
}
}
您将在System.Text.RegularExpressions
命名空间中找到Regex类。还要确保文本框的CausesValidation
属性设置为true
作为替代方案,您可能还想看看如何使用。我想说,使用两个文本框,就像有人在评论中所说的那样,但是如果您想固执,这里有一个函数可以在一个事件中运行,当文本框中的文本更改时会调用该函数
void textbox_textChanged(object sender, EventArgs e)
{
string text = textBox.Text;
int pointCounter = 0;
int addCounter =0
string temp = "";
string numbers = "0123456789";
for(int i =0;i<text.Length;i++)
{
bool found = false;
for(int j = 0;j<numbers.Length;j++)
{
if(text[i]==numbers[j])
{
temp+=text[i];
found = true;
break;
}
}
if(!found)
{
if('.' == text[i])
{
if(pointCounter<1)
{
pointCounter++;
temp+=text[i];
}
}else
if('+' == text[i])
{
if(addCounter<1)
{
pointCounter=0;
addCounter++;
temp+=text[i];
}
}
}
}
textBox.text = temp;
}
void textbox\u textChanged(对象发送方,事件参数e)
{
string text=textBox.text;
int pointCounter=0;
int addCounter=0
字符串temp=“”;
字符串编号=“0123456789”;
对于(int i=0;我只是出于好奇,有什么好的理由不能使用2个文本框吗?我想使用一个文本框离开事件!这不是一个真正的答案。你也可以使用2个文本框而不是1个文本框离开事件,这将更容易编码。你想做的事情复杂度更高,基本上没有任何好处。之前花一些时间来帮助你,我只需要确保这有一个很好的理由。如果你能帮上忙,请!注意:这也会允许一个“-”符号,例如+12.43-12.23
。你可以更改测试模式来做你想做的事情。