using Shared;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HDL_ON.Stan
|
{
|
/// <summary>
|
/// 界面最基层的底层共通
|
/// </summary>
|
public class CommonFormBase : FrameLayout
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 画面的ID(自动编号,唯一主键,和各页面并无任何逻辑关系,但是它的用处大着呢)
|
/// </summary>
|
public string FormID = string.Empty;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 初始化界面框架
|
/// </summary>
|
public virtual void InitForm()
|
{
|
//将当前的画面保存到内存当中
|
HdlFormLogic.Current.AddActionForm(this);
|
}
|
|
/// <summary>
|
/// 执行ShowForm()方法
|
/// </summary>
|
/// <param name="parameter">启动参数</param>
|
public virtual void LoadShowFormMethod(params object[] parameter)
|
{
|
this.LoadFormMethodByName(this, "ShowForm", parameter);
|
}
|
|
#endregion
|
|
#region ■ 添加界面___________________________
|
|
/// <summary>
|
/// 添加画面,启动参数由指定画面的ShowForm函数所指定
|
/// </summary>
|
/// <param name="parameter">启动参数:参数由指定画面的ShowForm函数所指定</param>
|
public virtual void AddForm(params object[] parameter)
|
{
|
return;
|
}
|
|
/// <summary>
|
/// 添加指定画面,并移除当前画面,启动参数由指定画面的ShowForm函数所指定
|
/// </summary>
|
/// <param name="form">目标界面</param>
|
/// <param name="parameter">启动参数:参数由指定画面的ShowForm函数所指定</param>
|
public void AddFormAndCloseNowForm(CommonFormBase form, params object[] parameter)
|
{
|
//移除当前画面
|
this.CloseForm();
|
//添加画面
|
form.AddForm(parameter);
|
}
|
|
#endregion
|
|
#region ■ 关闭界面___________________________
|
|
/// <summary>
|
/// 画面关闭之前(底层变更,不能重载CloseForm方法了)
|
/// </summary>
|
public virtual void CloseFormBefore()
|
{
|
}
|
|
/// <summary>
|
/// 画面关闭之后(新增)
|
/// </summary>
|
public virtual void CloseFormAfter()
|
{
|
}
|
|
/// <summary>
|
/// 画面关闭
|
/// </summary>
|
public void CloseForm()
|
{
|
try
|
{
|
//关闭进度条
|
this.CloseProgressBar();
|
|
//画面关闭之前
|
this.CloseFormBefore();
|
|
//调用的是Base的移除控件函数
|
//而不是调用this的移除控件函
|
base.RemoveFromParent();
|
|
//从列表中移除(防止画面二重添加)
|
HdlFormLogic.Current.RemoveActionForm(this);
|
|
//画面关闭之后
|
this.CloseFormAfter();
|
}
|
catch (Exception ex)
|
{
|
//出现未知错误
|
HdlMessageLogic.Current.ShowAppProgramIsError(ex);
|
}
|
}
|
|
/// <summary>
|
/// 画面关闭(在画面里面,请不要调用此方法,请使用CloseForm()方法)
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
//画面右滑时,关闭画面,调用自定义的CloseForm()方法
|
this.CloseForm();
|
}
|
|
#endregion
|
|
#region ■ 圆形进度条_________________________
|
|
/// <summary>
|
/// 进度条启动
|
/// </summary>
|
/// <param name="text">初始文本</param>
|
public void ShowProgressBar(string text = "")
|
{
|
if (this.FormID != HdlFormLogic.Current.NowActionFormID)
|
{
|
return;
|
}
|
ProgressBar.Show(text);
|
}
|
|
/// <summary>
|
/// 设置进度条的信息值(会自动计算百分比,值累加模式)
|
/// </summary>
|
/// <param name="value">值</param>
|
public void SetProgressValue(decimal value)
|
{
|
ProgressBar.SetValue(value);
|
}
|
|
/// <summary>
|
/// 设置进度条的信息值
|
/// </summary>
|
/// <param name="value">值</param>
|
public void SetProgressValue(string value)
|
{
|
ProgressBar.SetValue(value);
|
}
|
|
/// <summary>
|
/// 设置进度条的信息值
|
/// </summary>
|
/// <param name="value">值</param>
|
public void SetProgressMax(decimal value)
|
{
|
if (value == 0)
|
{
|
value = 100;
|
}
|
ProgressBar.SetMaxValue(value);
|
}
|
|
/// <summary>
|
/// 关闭进度条
|
/// </summary>
|
/// <param name="mode">是否显示重新加载的界面</param>
|
public void CloseProgressBar(ShowReLoadMode mode = ShowReLoadMode.NO)
|
{
|
ProgressBar.Close();
|
if (mode == ShowReLoadMode.YES)
|
{
|
//显示重新加载的界面(主要是用在界面加载错误时,再次加载)
|
this.ShowReLoadView();
|
}
|
}
|
|
/// <summary>
|
/// 显示重新加载的界面(主要是用在界面加载错误时,再次加载)
|
/// </summary>
|
public virtual void ShowReLoadView()
|
{
|
}
|
|
#endregion
|
|
#region ■ 一般的方法_________________________
|
|
/// <summary>
|
/// 显示信息框
|
/// </summary>
|
/// <param name="msgType">信息类型</param>
|
/// <param name="msg">信息</param>
|
/// <param name="action">单击确认后执行的回调函数</param>
|
/// <param name="buttonText">按钮的文本</param>
|
/// <param name="i_waitTime">等待时间,单位为秒,设置确认按钮在多长时间后才能够点击</param>
|
public void ShowMassage(ShowMsgType msgType, string msg, Action action = null, string buttonText = null, int i_waitTime = -1)
|
{
|
HdlMessageLogic.Current.ShowMassage(msgType, msg, action, buttonText, i_waitTime);
|
}
|
|
/// <summary>
|
/// 判断当前正在活动的界面是否是当前这个界面
|
/// </summary>
|
/// <returns></returns>
|
public bool NowFormIsAction()
|
{
|
return HdlFormLogic.Current.NowActionFormID == this.FormID;
|
}
|
|
/// <summary>
|
/// 计算图片的真实高宽度
|
/// </summary>
|
/// <param name="i_size"></param>
|
/// <returns></returns>
|
public int GetPictrueRealSize(int i_size)
|
{
|
return Application.GetRealWidth(i_size);
|
}
|
|
#endregion
|
|
#region ■ 反射方法___________________________
|
|
|
/// <summary>
|
/// 执行指定画面的方法
|
/// </summary>
|
/// <param name="formName">指定画面的英文名</param>
|
/// <param name="method">指定要加载的方法名</param>
|
/// <param name="parameter">启动参数</param>
|
public object LoadFormMethodByName(string formName, string method, params object[] parameter)
|
{
|
var form = HdlFormLogic.Current.GetFormByName(formName);
|
if (form == null)
|
{
|
return null;
|
}
|
return this.LoadFormMethodByName(form, method, parameter);
|
}
|
|
/// <summary>
|
/// 执行指定画面的方法(注意:这个是专门调用异步,并且等待异步完成的高科技函数,不调用异步的情况,别使用此函数)
|
/// </summary>
|
/// <param name="formName">指定画面的英文名</param>
|
/// <param name="method">指定要加载的方法名</param>
|
/// <param name="parameter">启动参数</param>
|
public async Task<object> LoadFormMethodByNameAsync(string formName, string method, params object[] parameter)
|
{
|
var form = HdlFormLogic.Current.GetFormByName(formName);
|
if (form == null)
|
{
|
return null;
|
}
|
var task = this.LoadFormMethodByName(form, method, parameter) as Task;
|
await task;
|
|
var result = task.GetType().GetProperty("Result").GetValue(task, null);
|
return result;
|
}
|
|
/// <summary>
|
/// 执行指定画面的方法
|
/// </summary>
|
/// <param name="form">指定画面的英文名</param>
|
/// <param name="method">指定要加载的方法名</param>
|
/// <param name="parameter">启动参数</param>
|
public object LoadFormMethodByName(CommonFormBase form, string method, params object[] parameter)
|
{
|
try
|
{
|
if (form == null)
|
{
|
return null;
|
}
|
var myMethod = form.GetType().GetMethod(method);
|
return myMethod.Invoke(form, parameter);
|
}
|
catch (Exception ex)
|
{
|
//出现未知错误,数据丢失
|
HdlMessageLogic.Current.ShowAppProgramIsError(ex);
|
return null;
|
}
|
}
|
|
/// <summary>
|
/// 使用反射方法,打开指定的画面(只支持继承于UserCenterCommonForm的画面)
|
/// </summary>
|
/// <param name="fullName">画面的命名空间+画面的英文名</param>
|
/// <param name="parameter">启动参数</param>
|
public void LoadFormByFullName(string fullName, params object[] parameter)
|
{
|
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
|
var form = (CommonFormBase)assembly.CreateInstance(fullName);
|
form.AddForm(parameter);
|
}
|
|
#endregion
|
|
#region ■ 设备状态更新推送___________________
|
|
/// <summary>
|
/// 设备状态更新推送
|
/// </summary>
|
/// <param name="i_LocalDevice">本地设备对象</param>
|
public virtual void DeviceStatuPush(Entity.Function i_LocalDevice)
|
{
|
}
|
|
#endregion
|
}
|
}
|