1

そこで、学生の詳細と留学生のために別のクラスでウィンドウフォームを作成しています。学生/留学生の私の年のマークが0より大きく100未満であることを検証する必要があります。

また、生年月日をdd / mm / yyyyと表示したいのですが、現在はそれと時刻が表示されています。

以下のコードを含めます。

最初の生年月日

student1.DateOfBirth = DateTime.Parse(txtDateofbirth.Text).Date;

if (string.IsNullOrEmpty(txtDateofbirth.Text))
{
    MessageBox.Show("Please enter a DoB");
}

さあ、今年のマーク

try // Trying to do the thing in the curly braces
{
    student1.YearMark = Int32.Parse(txtYearMark.Text);
}
catch (Exception) // If it doesn't work skip the crash and print this
{
    MessageBox.Show("The Year mark must be a number and can't be empty");
} 
4

4 に答える 4

1

TextBoxを使用する代わりに、日付の入力にはDateTimePickerコントロールを使用し、YearMarkの入力にはNumericUpDownコントロールを使用することをお勧めします。

DateTimePickerコントロールを使用すると、表示形式を定義し、エントリを特定の範囲に制限できます。私が正しく覚えていれば、ValueプロパティはDateTime型であるため、文字列を解析する必要はありません。

NumericUpDownコントロールを使用すると、許可される値の範囲を定義できます。ValueプロパティのタイプはDecimalですが、これをInt32に安全にキャストできます。これは、文字列を解析するよりもはるかに安全です。

于 2012-10-18T21:25:31.413 に答える
0

日付の関数がオーバーロードToString()されているため、必要な形式を正確に指定できます。

Date l_date = Date.Today();
l_date.ToString( "dd/MM/yyyy" );

使用可能な形式の詳細については、次のドキュメントにアクセスしてください:http:
//msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

の解析は、次のように関数を介しstringint実行できます。Int32.TryParse

string x = "32";
int y = -1;
if ( !x.TryParse( x, out y ) ){
    // The parse failed
}

次に、intの値をテストして、目的の範囲内にあるかどうかを判断できます。

if ( y > 0 && y <= 100 ){
    // Do something
}
于 2012-10-18T21:20:59.687 に答える
0
  1. DateTimeオブジェクトと現在の日付の差を取得する必要があるため、TimeSpanオブジェクトを作成して、その「Years」プロパティを取得できます。

    TimeSpan diff = new DateTime()。subtract(dateOfBirth);

    if(diff.Years> 0 && diff.Years <100)isValid = true;

  2. DateTimeオブジェクトを必要な形式で表示するには、フォーマッターでToString()メソッドを使用します。

    正確な問題を解決するには、次のことを試してください。

    dateOfBirth.ToString( "dd / MM / yyyy"); //大文字のMMは月を示し、小文字のMMは分を示します

于 2012-10-18T21:25:09.107 に答える
0

これをテストする簡単な方法を作成することもできます。これも例です。

    IsDate(txtYearMark.Text);
    public static bool IsDate(string date)
    {
        DateTime Temp;
        return(DateTime.TryParse(date, out Temp)&&date.Length>=10)
    }
于 2012-10-18T21:29:25.670 に答える