New file |
| | |
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.Text;
|
| | |
|
| | | namespace Shared.Phone.UserCenter
|
| | | {
|
| | | /// <summary>
|
| | | /// 日期选择控件(设置和获取值,请使用 dateValue)
|
| | | /// </summary>
|
| | | public class DateSelectControl : ButtonBase
|
| | | {
|
| | | #region ■ 变量声明___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 日期选择时间(8位,如:20101231)
|
| | | /// </summary>
|
| | | public Action<string> DateSelectEvent = null;
|
| | | /// <summary>
|
| | | /// 日期格式
|
| | | /// </summary>
|
| | | private string dateFomat = string.Empty;
|
| | | /// <summary>
|
| | | /// 标题信息
|
| | | /// </summary>
|
| | | private string titleText = string.Empty;
|
| | |
|
| | | private string m_dateValue = "00000000";
|
| | | /// <summary>
|
| | | /// 设置或者获取日期值(8位,如:20101231)
|
| | | /// </summary>
|
| | | public string dateValue
|
| | | {
|
| | | get { return m_dateValue; }
|
| | | set
|
| | | {
|
| | | this.m_dateValue = value;
|
| | |
|
| | | int year = Convert.ToInt32(value.Substring(0, 4));
|
| | | int month = Convert.ToInt32(value.Substring(4, 2));
|
| | | int day = Convert.ToInt32(value.Substring(6, 2));
|
| | |
|
| | | var myTime = new DateTime(year, month, day);
|
| | | this.Text = myTime.ToString(this.dateFomat);
|
| | | }
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 年
|
| | | /// </summary>
|
| | | public int Year
|
| | | {
|
| | | get { return Convert.ToInt32(m_dateValue.Substring(0, 4)); }
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 月
|
| | | /// </summary>
|
| | | public int Month
|
| | | {
|
| | | get { return Convert.ToInt32(m_dateValue.Substring(4, 2)); }
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 日
|
| | | /// </summary>
|
| | | public int Day
|
| | | {
|
| | | get { return Convert.ToInt32(m_dateValue.Substring(6, 2)); }
|
| | | }
|
| | |
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 初始化_____________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 日期选择控件(设置和获取值,请使用 dateValue)
|
| | | /// </summary>
|
| | | /// <param name="i_titleText">标题文本</param>
|
| | | /// <param name="i_dateFomat">日期格式</param>
|
| | | public DateSelectControl(string i_titleText = "", string i_dateFomat = "yyyy/MM/dd")
|
| | | {
|
| | | this.dateFomat = i_dateFomat;
|
| | | this.titleText = i_titleText;
|
| | |
|
| | | //用来计算长度的
|
| | | string dateTextTemp = DateTime.Now.ToString(i_dateFomat);
|
| | | this.TextSize = 12;
|
| | | this.Text = dateTextTemp;
|
| | |
|
| | | this.InitSize(this.GetRealWidthByText(), Application.GetRealHeight(50), false);
|
| | | this.Text = string.Empty;
|
| | |
|
| | | //弹起日期选择
|
| | | this.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | //日期选择
|
| | | this.DoSelectDate();
|
| | | };
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 日期选择___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 日期选择
|
| | | /// </summary>
|
| | | private void DoSelectDate()
|
| | | {
|
| | | var listYear = new List<string>();
|
| | | int nowYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));
|
| | | for (int i = 0; i < 6; i++)
|
| | | {
|
| | | //五年时间
|
| | | listYear.Insert(0, (nowYear - i).ToString());
|
| | | }
|
| | | //月
|
| | | var listMonth = new List<string>();
|
| | | var monthText = Language.StringByID(R.MyInternationalizationString.Month);
|
| | | for (int i = 1; i <= 12; i++)
|
| | | {
|
| | | listMonth.Add(i.ToString().PadLeft(2, '0') + monthText);
|
| | | }
|
| | | //日
|
| | | var listDay = new List<string>();
|
| | | var dayText = Language.StringByID(R.MyInternationalizationString.Day);
|
| | | for (int i = 1; i <= 31; i++)
|
| | | {
|
| | | listDay.Add(i.ToString().PadLeft(2, '0') + dayText);
|
| | | }
|
| | | PickerView.ShowNormal(listYear, listMonth, listDay, (iyear, imonth, iday) =>
|
| | | {
|
| | | //获取正确的日期文本
|
| | | string datetTemp = this.GetRightDateText(Convert.ToInt32(listYear[iyear]), Convert.ToInt32(listMonth[imonth].Substring(0, 2)), Convert.ToInt32(listDay[iday].Substring(0, 2)));
|
| | | bool change = datetTemp != this.dateValue;
|
| | | //文本显示
|
| | | this.dateValue = datetTemp;
|
| | | if (change == true)
|
| | | {
|
| | | //值改变才会调用回调函数
|
| | | DateSelectEvent?.Invoke(datetTemp);
|
| | | }
|
| | | },
|
| | | listYear.IndexOf(m_dateValue.Substring(0, 4)),
|
| | | listMonth.IndexOf(m_dateValue.Substring(4, 2) + monthText),
|
| | | listDay.IndexOf(m_dateValue.Substring(6, 2) + dayText),
|
| | | this.titleText,
|
| | | Language.StringByID(R.MyInternationalizationString.uFinish),
|
| | | Language.StringByID(R.MyInternationalizationString.uCancel));
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 一般方法___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 获取正确的日期文本
|
| | | /// </summary>
|
| | | /// <param name="year"></param>
|
| | | /// <param name="month"></param>
|
| | | /// <param name="day"></param>
|
| | | /// <returns></returns>
|
| | | private string GetRightDateText(int year, int month, int day)
|
| | | {
|
| | | if (month == 4 || month == 6 || month == 9 || month == 11)
|
| | | {
|
| | | if (day > 30)
|
| | | {
|
| | | day = 30;
|
| | | }
|
| | | }
|
| | | else if (month == 2)
|
| | | {
|
| | | //闰年
|
| | | if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
|
| | | {
|
| | | if (day > 29)
|
| | | {
|
| | | day = 29;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | if (day > 28)
|
| | | {
|
| | | day = 28;
|
| | | }
|
| | | }
|
| | | }
|
| | | return year.ToString() + month.ToString().PadLeft(2, '0') + day.ToString().PadLeft(2, '0');
|
| | | }
|
| | |
|
| | | #endregion
|
| | | }
|
| | | }
|