using Shared; using HDL_ON.UI.CSS; using System; using System.Collections.Generic; using System.Text; namespace HDL_ON.Stan { /// /// 底部日期选择控件(年月日),不需要加到父控件 /// public class BottomDateSelectControl : BottomDialogCommon { #region ■ 变量声明___________________________ /// /// 结束事件(0:点击了取消 1:点击了确定,第二,三,四参数为年月日) /// public Action FinishEvent = null; /// /// 年的集合 /// private List listYear = new List(); /// /// 月的集合 /// private List listMonth = new List(); /// /// 日的集合 /// private List listDay = new List(); /// /// 选择的年 /// private int selectYear = 0; /// /// 选择的月 /// private int selectMonth = 0; /// /// 选择的日 /// private int selectDay = 0; #endregion #region ■ 初始化_____________________________ /// /// 底部时间选择控件(年月日),不需要加到父控件 /// /// 标题 /// 点击背景时,是否关闭弹窗 public BottomDateSelectControl(string i_title = "", bool clickBackClose = true) { base.ClickBackClose = clickBackClose; base.StrTitle = i_title; base.RowCount = 5; } /// /// 初始化控件(月日) /// /// 默认选择月 /// 默认选择日 public void InitControl(int i_month, int i_day) { //初始化控件 this.DoInitControl(0, i_month, i_day, -1, -1); } /// /// 初始化控件(年月日) /// /// 默认选择年 /// 默认选择月 /// 默认选择日 /// 年的范围指定,以当前年为基准,向前几年,请输入正数 /// 年的范围指定,以当前年为基准,向后几年,请输入正数 public void InitControl(int i_year, int i_month, int i_day, int i_yearFrom, int i_yearTo) { //初始化控件 this.DoInitControl(i_year, i_month, i_day, i_yearFrom, i_yearTo); } /// /// 初始化控件 /// /// 默认选择年 /// 默认选择月 /// 默认选择日 /// 年的范围指定,以当前年为基准,向前几年,请输入正数 /// 年的范围指定,以当前年为基准,向后几年,请输入正数 private void DoInitControl(int i_year, int i_month, int i_day, int i_yearFrom, int i_yearTo) { //已经初始化 if (base.btnCancel != null) { return; } this.selectYear = i_year; this.selectMonth = i_month; this.selectDay = i_day; //初始化年月日列表 this.InitYearMonthDayList(i_yearFrom, i_yearTo); //初始化底层控件 var frameWhiteBack = base.InitBaseControl(); //取消 base.btnCancel.ButtonClickEvent += (sender, e) => { base.Close(); this.FinishEvent?.Invoke(0, 0, 0, 0); this.FinishEvent = null; }; //确认 base.btnConfirm.ButtonClickEvent += (sender, e) => { //检测选择的年月日是否正确 if (HdlCommonLogic.Current.CheckDateIsRight(selectYear, selectMonth, selectDay) == false) { return; } base.Close(); this.FinishEvent?.Invoke(1, selectYear, selectMonth, selectDay); this.FinishEvent = null; }; //线 var btnLine = new NormalViewControl(frameWhiteBack.Width, HdlControlResourse.BottomLineHeight, false); btnLine.BackgroundColor = CSS_Color.PromptingColor2; btnLine.Y = btnCancel.Bottom; frameWhiteBack.AddChidren(btnLine); //时间控件 var pickerView = new UIPickerView(); pickerView.Height = frameWhiteBack.Height - btnLine.Bottom; pickerView.Width = frameWhiteBack.Width - Application.GetRealWidth(8) * 2; pickerView.Y = btnLine.Bottom; pickerView.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(pickerView); if (Language.CurrentLanguage == "Chinese") { //初始化控件(中文) this.DoInitControlOnChineseLanguage(pickerView, i_year, i_month, i_day); } else { //初始化控件(英文) this.DoInitControlOnEnglishLanguage(pickerView, i_year, i_month, i_day); } } /// /// 初始化控件(中文) /// /// 时间控件 /// 默认选择年 /// 默认选择月 /// 默认选择日 private void DoInitControlOnChineseLanguage(UIPickerView pickerView, int i_year, int i_month, int i_day) { //默认索引 var index1 = listYear.IndexOf(i_year.ToString() + Language.StringByID(StringId.Years)); if (index1 == -1) { index1 = 0; } var index2 = listMonth.IndexOf(i_month.ToString() + Language.StringByID(StringId.month)); if (index2 == -1) { index2 = 0; } var index3 = listDay.IndexOf(i_day.ToString() + Language.StringByID(StringId.day)); if (index3 == -1) { index2 = 0; } pickerView.setNPicker(listYear.Count == 0 ? null : listYear, listMonth, listDay); //设置初始选择 pickerView.setCurrentItems(index1, index2, index3); pickerView.OnSelectChangeEvent = (value1, value2, value3) => { //更改索引 selectYear = Convert.ToInt32(listYear[value1].Substring(0, 4)); selectMonth = value2 + 1; selectDay = value3 + 1; }; } /// /// 初始化控件(英文) /// /// 时间控件 /// 默认选择年 /// 默认选择月 /// 默认选择日 private void DoInitControlOnEnglishLanguage(UIPickerView pickerView, int i_year, int i_month, int i_day) { //默认索引 var index1 = listYear.IndexOf(i_year.ToString()); if (index1 == -1) { index1 = 0; } var index2 = i_month - 1; var index3 = i_day - 1; pickerView.setNPicker(listYear.Count == 0 ? null : listDay, listMonth, listYear); //设置初始选择 pickerView.setCurrentItems(index3, index2, index1); pickerView.OnSelectChangeEvent = (value1, value2, value3) => { //更改索引 selectYear = Convert.ToInt32(listYear[value3]); selectMonth = value2 + 1; selectDay = value1 + 1; }; } #endregion #region ■ 一般方法___________________________ /// /// 初始化年月日列表 /// /// 年的范围指定,以当前年为基准,向前几年,请输入正数 /// 年的范围指定,以当前年为基准,向后几年,请输入正数 private void InitYearMonthDayList(int i_yearFrom, int i_yearTo) { //年 var strYear = Language.CurrentLanguage == "Chinese" ? Language.StringByID(StringId.Years) : string.Empty; //月 var strMonth = Language.StringByID(StringId.month); //日 var strDay = Language.CurrentLanguage == "Chinese" ? Language.StringByID(StringId.day) : string.Empty; //获取年的列表 int nowYear = DateTime.Now.Year; for (int i = i_yearFrom; i > 0; i--) { this.listYear.Add((nowYear - i) + strYear); } this.listYear.Add(nowYear + strYear); for (int i = i_yearTo; i > 0; i--) { this.listYear.Add((nowYear + i) + strYear); } //获取月的列表 for (int i = 1; i <= 12; i++) { if (Language.CurrentLanguage == "Chinese") { //中文 this.listMonth.Add(i.ToString() + strMonth); } else { //英文 this.listMonth.Add(HdlCommonLogic.Current.GetMonthShortText(i)); } } //获取日的列表 for (int i = 1; i <= 31; i++) { this.listDay.Add(i.ToString() + strDay); } } /// /// 关闭界面 /// public override void Close() { base.Close(); this.FinishEvent = null; } #endregion } }