C# 如何检查文本框中的文本?

C# 如何检查文本框中的文本?,c#,C#,我想申请一个视频俱乐部。我有一个名为txtMovieDuration的文本框,我想在其中键入电影的持续时间。 我所做的是,我允许用户只写这种格式的数字(hh:mm:ss)。点自动出现。 但是,有一个问题,逻辑上的ss(秒)和mm(分钟)不能大于59(因为它们只能从0到59)。如何将秒和分钟检查为 < P>创建秒的子串。 String sub = txtMovieDuration.Text.Substring(6); if(Convert.ToInt32(sub) < 60) //Do so

我想申请一个视频俱乐部。我有一个名为
txtMovieDuration
的文本框,我想在其中键入电影的持续时间。
我所做的是,我允许用户只写这种格式的数字(hh:mm:ss)。点自动出现。 但是,有一个问题,逻辑上的ss(秒)和mm(分钟)不能大于
59
(因为它们只能从0到59)。如何将秒和分钟检查为
<60

private void txtMovieDuration_TextChanged(object sender, EventArgs e)  
        {  
            txtMovieDuration.MaxLength = 8;

            if (txtMovieDuration.Text.Length == 2)
            {
                txtMovieDuration.Text += ":";
            }

            if (txtMovieDuration.Text.Length == 5)
            {
                txtMovieDuration.Text += ":";
            }

            txtMovieDuration.SelectionStart = txtMovieDuration.Text.Length;
         }

如果你这样做呢

public bool ValidateTime(string time)
{
     Regex regExp = new Regex(@"(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])");

     return regExp.IsMatch(time);
}

您可以从文本框中读取字符串值,并将其转换为Int或您正在使用的任何数据类型。 有关转换的更多帮助,请参见

简短回答:使用控件,将其format属性设置为Time

但是,如果您无法使用文本框,您可以

  • 使用正则表达式检查格式(如@David Aleu的答案)
  • 在分隔符(
    )上拆分字符串并手动验证部分,如:

    string[] parts = txtMovieDuration.Text.Split(':');
    if (parts.Length !=3) //there must be a hh:mi:ss parts
    {
       MessageBox.Show("invalid time string");
       return;
    }
    int hours;
    if (int.TryParse(parts[0], out hours))
    {
       MessageBox.Show("the hours part is not a number");
       return;
    }
    //if you want to check the value of hours as sensible you could do it here
    //as there are very few movies longer than 10 hours
    int minutes;
    if (int.TryParse(parts[1], out minutes))
    {
       MessageBox.Show("the minutes part is not a number");
       return;
    }
    if ((minutes < 0) || (minutes > 59)
    {
       MessageBox.Show("the minutes part is out of range");
       return;
    }
    
    int seconds;
    if (int.TryParse(parts[2], out seconds))
    {
       MessageBox.Show("the seconds part is not a number");
       return;
    }
    if ((seconds < 0) || (seconds > 59)
    {
       MessageBox.Show("the seconds part is out of range");
       return;
    }
    //you can now make a TimeSpan object for the duration
    TimeSpan duration = new TimeSpan(hours, minutes, seconds);
    
您可以使用验证用户输入:

TimeSpan duration;
if (!TimeSpan.TryParse(txtMovieDuration.Text, out duration))
{
    MessageBox.Show("Please use correct format 'hh:mm:ss'!)");
}

你应该考虑使用一个可选的控件。< /P> < P>创建秒的子串。

String sub = txtMovieDuration.Text.Substring(6);
if(Convert.ToInt32(sub) < 60)
//Do something here

注意:我假设:是字符串的一部分。如果没有,只需更改子字符串的起始值和结束值。

您可以使用掩码为
00:00:00
MaskedTextBox
,而不是使用正常的
文本框
,它将自动添加
s并只允许输入数字

要检查其值是否为有效的时间跨度值,请将其
ValidatingType
设置为
TimeSpan

this.maskedTextBox1.ValidatingType = typeof(TimeSpan);

然后,您可以收听
MaskedTextBox.TypeValidationCompleted
事件,并使用
e.IsValidInput
确定用户是否输入了正确的时间跨度值。

您将需要使用某种正则表达式验证。或者,您可以在上拆分字符串并验证每个单独的部分。经典的方法是尝试将输入转换为日期或时间对象。如果失败,请进行错误处理。您有什么原因不能使用
DateTimePicker
MaskedTextBox
?如果写得不好,对
文本框执行类似操作可能会有问题。还需要将
showup
设置为
True
,否则您将看到日历。还有一个问题是,您可能无法将小时值设置为>23@AlvinWong根据他的说法,只有10部电影才有问题。我怀疑这些都很无聊。这是一个很好的方式。尽管使用了这个,但他不能真正告诉用户他做错了什么。
if(Convert.ToInt32(txtMovieDuration.Text.Substring(3,2)) && Convert.ToInt32(txtMovieDuration.Text.Substring(6)) > 60)
{ 
   //Error handling code

}
this.maskedTextBox1.ValidatingType = typeof(TimeSpan);