2013-03-07 78 views
1

我想從datetimepicker計算年齡。 只要用戶從datetimepicker中選擇日期,即可計算年齡,然後立即在年齡文本框中自動顯示。 這是我在控制檯應用程序都做從datetimepicker計算年齡,並立即在文本框中顯示該年齡

int age = 0; 
DateTime currentDate = DateTime.Parse(DateTime.Now.Date.ToShortDateString());   
Console.WriteLine(currentDate); 
Console.WriteLine("Please enter your birthdate"); 
DateTime birthdate = DateTime.Parse(Console.ReadLine()); 
age = currentDate.Year - birthdate.Year; 
if (currentDate.Month <birthdate.Month) 
    { 
     age--; 
    } 
else if ((currentDate.Month >= birthdate.Month) 
      && (currentDate.Day < birthdate.Day)) 
{ 
     age--; 
} 

Console.WriteLine(age); 

我可以做計算的winform年齡application.But我沒有經過任何想法相同的邏輯,如何顯示在文本框歲這個年齡自動後瞬間用戶從datetimepicker中選擇了年齡。

+0

你可以讓你通過直接保存日期來提高''currentDate''的效率'DateTime currentDate = DateTime.Now.Date;'。你*不需要轉換成String,然後解析回DateTime。 – Jesse 2013-03-07 09:31:48

+0

我傾向於更容易寫出int age ='(int)(DateTime.Now.Subtract(birthday).TotalDays/365.25)',它的代碼更少並且更易讀IMO – happygilmore 2013-03-07 09:36:54

+0

謝謝大家。我真的很感謝你們幫幫我。我仍然在學習C#,所以我可能會問很多問題,所以在將來也可以這樣幫助我。 – 2013-03-07 22:48:53

回答

0

好的,這很簡單。只需添加聽取datepicker的OnValueChanged事件的eventhandler即可。請參閱msdn頁面尋求幫助。 只需設置文本框的值,如myTextBox.Text = new calculated value

0

只需將ValueChanged事件添加到DateTimePicker。形式已經改變了它的價值後

MSDN ValueChanged Event

此事件被調用。 您的代碼看起來就像這樣:

dateTimePicker.ValueChanged += new EventHandler(dateTimePicker_ValueChanged); 

void dateTimePicker_ValueChanged(object sender, EventArgs e) 
{ 
    DateTime birthdate = dateTimePicker.Value; 
    //Recalculate the birthdate and set Textbox 
} 
0

我覺得你在這裏有一個BUG:

else if ((currentDate.Month >= birthdate.Month) 
      && (currentDate.Day < birthdate.Day)) 
{ 
     age--; 
} 

應該(currentDate.Month == birthdate.Month)

3

我知道它來不及回答,但仍,只需使用這在DateTimePicker的ValueChanged事件上,希望對別人有幫助

private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 
     { 
      int Age = DateTime.Today.Year - dateTimePicker1.Value.Year; // CurrentYear - BirthDate 

      txtAge.Text = Age.ToString(); 
     }