2017-03-27 9 views
-5

私はC#を初めて使っています。これは初めてのプログラムです。このプロジェクトでは、ユーザーの年齢を日数で計算する年齢計算機を作成する必要があります。高い等級を取得するには、次を含める必要があります。年齢電卓 - 試してみる/キャッチしてテキストボックスを確認する

  • ユーザーが(に許可なし数字を自分の名前を入力していないまでプログラムを継続できないように検証
  • プログラムのどこかでキャッチ/お試しくださいテキストボックス)
  • サブルーチン(関数/手続き)

私を困惑させた最後のものはプログラムも考慮うるう年を考慮に入れると、ユーザーが無効な日付などを入力したかどうかを確認する必要があります2001年2月29日に、ユーザーに修正させてください。コンボボックス内のどこかにうるう年を表示することも良いでしょうが、私は現在これを行う経験がありません。

アドバイスをいただければ幸いです。その年がうるう年の場合

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace NumberOfDaysOld 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //========================================================= 
      // DISPLAYS MONTHS OF THE YEAR IN THE MONTH COMBOBOX 
      //========================================================= 
      string[] monthArray = new string[12]; 
      monthArray[0] = "January"; 
      monthArray[1] = "February"; 
      monthArray[2] = "March"; 
      monthArray[3] = "April"; 
      monthArray[4] = "May"; 
      monthArray[5] = "June"; 
      monthArray[6] = "July"; 
      monthArray[7] = "August"; 
      monthArray[8] = "September"; 
      monthArray[9] = "October"; 
      monthArray[10] = "November"; 
      monthArray[11] = "December"; 

      for (int index = 0; index < monthArray.Length; index++) 
      { 
       comboBoxMonth.Items.Add(monthArray[index]); 
      } 

      //========================================================= 
      // DISPLAYS YEARS 1900 TO CURRENT YEAR IN THE YEAR COMBOBOX 
      //========================================================= 

      for (int i = 1900; i <= DateTime.Now.Year; i++) 
      { 
       comboBoxYear.Items.Add(i.ToString()); 
      } 

      //========================================================= 
      // DISPLAYS DATES OF THE MONTH IN THE DAYS COMBOBOX 
      //========================================================= 

      for (int i = 1; i <= 31; i++) 
      { 
       comboBoxDay.Items.Add(i.ToString()); 
      } 

     } 

     private void timerDateTime_Tick(object sender, EventArgs e) 
     { 
      //========================================================= 
      // DISPLAYS THE DATE AND TIME IN REALTIME 
      //========================================================= 

      labelDate.Text = DateTime.Now.ToShortDateString(); 
      labelTime.Text = DateTime.Now.ToLongTimeString(); 
     } 

     private void comboBoxDay_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 

     private void comboBoxMonth_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 


     private void buttonCalculate_Click(object sender, EventArgs e) 
     { 
      DateTime dob = new DateTime(Convert.ToInt32(comboBoxYear.SelectedItem), comboBoxMonth.SelectedIndex + 1, Convert.ToInt32(comboBoxDay.SelectedItem)); 
      TimeSpan diff = DateTime.Now - dob; 
      int days = (int)diff.TotalDays; 
      MessageBox.Show(textBoxForename.Text + " is days old " + days.ToString()); 
     } 

     } 
    } 
} 
+0

スタックオーバーフローの最適な結果を得るには、「アドバイス」を求めるのではなく、特定の質問をする必要があります。あなたの方法であなたを得るために、私はtry-catchブロック(例外処理に使用される)を読み上げることをお勧めします。また、DateTime.IsLeapYearの使用を検討することもできます。 –

+0

また、.NETの一部であるDateTimeクラスを読んで、ほとんどすべての作業を行います。 –

+0

[なぜ誰かが私を助けることができますか?実際の質問ではありませんか?](https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question) – EJoshuaS

答えて

1
DateTime.IsLeapYear(int Year) 

はあなたを教えてくれます:

は、ここに私の完全なコードです。そして、あなたは彼らが無効であるかどうかを確認するために、月と日を確認することができます。

if(dob.Month == 2 && dob.day == 31 && !DateTime.IsLeapYear(dob.year)){ 
//someone put in Feb 31, not in a leap year!!! 
} 

同様に、あなたは日が入力されたかどうかを確認するために、毎月チェックすることができ無効です。

if(dob.month == 9 && dob.Day == 31) 
{ 
//someone entered Sept 31 
} 

またはDateTime.TryParseを使用()。日付を文字列として渡すと、日付が無効な場合はDateTime.TryParse()がfalseを返します。

bool validDate = DateTime.TryParse(string s) 
if(!validDate) 
{ 
//date is not valid 
} 
+0

'TryParse'は' out 'parameter ... –

+0

または、DateTime.Parseを使用して、割り当てが必要なときにtry/catchブロックでラップします –

関連する問題