using Shared;
|
using HDL_ON.UI.CSS;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace HDL_ON.Stan
|
{
|
/// <summary>
|
/// 底部日期选择控件(年月日),不需要加到父控件
|
/// </summary>
|
public class BottomDateSelectControl : BottomDialogCommon
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 结束事件(0:点击了取消 1:点击了确定,第二,三,四参数为年月日)
|
/// </summary>
|
public Action<int, int, int, int> FinishEvent = null;
|
/// <summary>
|
/// 年的集合
|
/// </summary>
|
private List<string> listYear = new List<string>();
|
/// <summary>
|
/// 月的集合
|
/// </summary>
|
private List<string> listMonth = new List<string>();
|
/// <summary>
|
/// 日的集合
|
/// </summary>
|
private List<string> listDay = new List<string>();
|
/// <summary>
|
/// 选择的年
|
/// </summary>
|
private int selectYear = 0;
|
/// <summary>
|
/// 选择的月
|
/// </summary>
|
private int selectMonth = 0;
|
/// <summary>
|
/// 选择的日
|
/// </summary>
|
private int selectDay = 0;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 底部时间选择控件(年月日),不需要加到父控件
|
/// </summary>
|
/// <param name="i_title">标题</param>
|
/// <param name="clickBackClose">点击背景时,是否关闭弹窗</param>
|
public BottomDateSelectControl(string i_title = "", bool clickBackClose = true)
|
{
|
base.ClickBackClose = clickBackClose;
|
base.StrTitle = i_title;
|
base.RowCount = 5;
|
}
|
|
/// <summary>
|
/// 初始化控件(月日)
|
/// </summary>
|
/// <param name="i_month">默认选择月</param>
|
/// <param name="i_day">默认选择日</param>
|
public void InitControl(int i_month, int i_day)
|
{
|
//初始化控件
|
this.DoInitControl(0, i_month, i_day, -1, -1);
|
}
|
|
/// <summary>
|
/// 初始化控件(年月日)
|
/// </summary>
|
/// <param name="i_year">默认选择年</param>
|
/// <param name="i_month">默认选择月</param>
|
/// <param name="i_day">默认选择日</param>
|
/// <param name="i_yearFrom">年的范围指定,以当前年为基准,向前几年,请输入正数</param>
|
/// <param name="i_yearTo">年的范围指定,以当前年为基准,向后几年,请输入正数</param>
|
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);
|
}
|
|
/// <summary>
|
/// 初始化控件
|
/// </summary>
|
/// <param name="i_year">默认选择年</param>
|
/// <param name="i_month">默认选择月</param>
|
/// <param name="i_day">默认选择日</param>
|
/// <param name="i_yearFrom">年的范围指定,以当前年为基准,向前几年,请输入正数</param>
|
/// <param name="i_yearTo">年的范围指定,以当前年为基准,向后几年,请输入正数</param>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 初始化控件(中文)
|
/// </summary>
|
/// <param name="pickerView">时间控件</param>
|
/// <param name="i_year">默认选择年</param>
|
/// <param name="i_month">默认选择月</param>
|
/// <param name="i_day">默认选择日</param>
|
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;
|
};
|
}
|
|
/// <summary>
|
/// 初始化控件(英文)
|
/// </summary>
|
/// <param name="pickerView">时间控件</param>
|
/// <param name="i_year">默认选择年</param>
|
/// <param name="i_month">默认选择月</param>
|
/// <param name="i_day">默认选择日</param>
|
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 ■ 一般方法___________________________
|
|
/// <summary>
|
/// 初始化年月日列表
|
/// </summary>
|
/// <param name="i_yearFrom">年的范围指定,以当前年为基准,向前几年,请输入正数</param>
|
/// <param name="i_yearTo">年的范围指定,以当前年为基准,向后几年,请输入正数</param>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 关闭界面
|
/// </summary>
|
public override void Close()
|
{
|
base.Close();
|
this.FinishEvent = null;
|
}
|
|
#endregion
|
}
|
}
|