我正在尝试制作一个VideoClub应用程序。我有一个名为txtMovieDuration
的文本框,我要在其中输入电影持续时间c
我所做的是,我允许用户以这种格式写出数字(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;
}
答案 0 :(得分:4)
简答:使用DateTimePicker控件,将其格式属性设置为时间。
但是,如果您使用textBox卡住了,可以
在分隔符(:
)上拆分字符串并手动验证部件,例如:
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);
您也可以不检查小时/分钟/秒变量的范围,但(ab)使用TimeSpan
构造函数的功能。由于这些值只是转换为刻度线,并且用于初始化TimeSpan
的刻度线,因此执行new TimeSpan(1000,2000,3000)
是合法的。它将产生1000小时,2000分钟(也称为33小时20分钟)和3000秒(又称50分钟)的时间跨度,导致43天,2小时和10分钟的时间跨度。这一切都意味着你可以做到:
TimeSpan duration = new TimeSpan(hours, minutes, seconds);
if ((duration .Hours != hours)
|| (duration .Minutes != minutes)
|| (duration .Seconds != seconds))
{
MessageBox.Show("the seconds part is out of range");
return;
}
答案 1 :(得分:4)
您可以使用TimeSpan.TryParse
来验证用户输入:
TimeSpan duration;
if (!TimeSpan.TryParse(txtMovieDuration.Text, out duration))
{
MessageBox.Show("Please use correct format 'hh:mm:ss'!)");
}
您应该考虑使用DateTimePicker
引用的可选SWeko控件。
答案 2 :(得分:2)
如果你这样做怎么办?
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);
}
答案 3 :(得分:0)
您可以从文本框中读取字符串值,并将其转换为Int或您正在使用的任何数据类型。 有关转换的更多帮助可以找到here
答案 4 :(得分:0)
创建秒的子字符串。
String sub = txtMovieDuration.Text.Substring(6);
if(Convert.ToInt32(sub) < 60)
//Do something here
同样做几分钟或一起做。 例如:
if(Convert.ToInt32(txtMovieDuration.Text.Substring(3,2)) && Convert.ToInt32(txtMovieDuration.Text.Substring(6)) > 60)
{
//Error handling code
}
注意:我假设:是字符串的一部分。如果没有,只需更改子串的起始值和结束值。
答案 5 :(得分:0)
您可以将MaskedTextBox
掩码用作00:00:00
,而不是使用普通TextBox
,它会自动添加:
并且只允许输入数字。
要检查其值是否为有效时间跨度值,请将其ValidatingType
设置为TimeSpan
。
this.maskedTextBox1.ValidatingType = typeof(TimeSpan);
然后,您可以收听MaskedTextBox.TypeValidationCompleted
事件并使用e.IsValidInput
来确定用户是否输入了正确的时间跨度值。