xm
2020-12-10 3aa397ab145382935492b11c1f18c9634e69910b
ZigbeeApp/Shared/Phone/MainPage/ControlForm/Base/DeviceDetailCardCommonForm.cs
old mode 100755 new mode 100644
@@ -5,407 +5,433 @@
using ZigBee.Device;
namespace Shared.Phone.MainPage.ControlForm
{
{
  /// <summary>
  /// 主页深度卡片的底层共通
  /// </summary>
  public class DeviceDetailCardCommonForm : EditorCommonForm
  {
    #region ■ 变量声明___________________________
    /// <summary>
    /// 主页深度卡片的底层共通
    /// 界面关闭事件
    /// </summary>
    public class DeviceDetailCardCommonForm : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 界面关闭事件
        /// </summary>
        public Action<CommonDevice> FormCloseEvent = null;
        /// <summary>
        /// 设备对象
        /// </summary>
        public CommonDevice device = null;
        /// <summary>
        /// 当前选择的房间对象(再次刷新界面时,这个东西有可能是null)
        /// </summary>
        public Common.Room nowSelectRoom = null;
        /// <summary>
        /// 标记它是由哪个控件调起的
        /// </summary>
        public ViewGroup RowOrCardControl = null;
        /// <summary>
        /// 状态控件
        /// </summary>
        private NormalViewControl btnStatu = null;
        /// <summary>
        /// 设备名称控件
        /// </summary>
        private NormalViewControl btnDeviceName = null;
        /// <summary>
        /// 房间名称
        /// </summary>
        private NormalViewControl btnRoomName = null;
        /// <summary>
        /// 是否获取网关反馈的结果  0:没有获取得到  1:已经获取得到
        /// </summary>
        public int ResponeResult = 0;
        /// <summary>
        /// 当前端点的功能类型
        /// </summary>
        private DeviceFunctionType nowDeviceFuncType = DeviceFunctionType.A未定义;
        /// <summary>
        /// 白色背景的宽度
        /// </summary>
        private int backFrameWidth = 0;
        /// <summary>
        /// 白色背景的高度
        /// </summary>
        private int backFrameHeight = 0;
        /// <summary>
        /// 当前的文本
        /// </summary>
        private string CurrentText = string.Empty;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        /// <param name="i_device">设备对象</param>
        /// <param name="i_nowSelectRoom">房间</param>
        /// <param name="i_backWidth">白色背景的宽度(非真实值)</param>
        /// <param name="i_backHeight">白色背景的高度(非真实值)</param>
        public void ShowForm(CommonDevice i_device, Common.Room i_nowSelectRoom, int i_backWidth, int i_backHeight)
        {
            this.CurrentText = Language.StringByID(R.MyInternationalizationString.Current) + "  ";
            this.nowSelectRoom = i_nowSelectRoom;
            this.backFrameWidth = i_backWidth;
            this.backFrameHeight = i_backHeight;
            //更多
            var btnMore = new MostRightIconControl(69, 69);
            btnMore.UnSelectedImagePath = "Item/More.png";
            topFrameLayout.AddChidren(btnMore);
            btnMore.InitControl();
            btnMore.ButtonClickEvent += (sender, e) =>
            {
                var detailInfo = new DeviceDetailInfoForm();
                detailInfo.AddForm(device, nowSelectRoom);
            };
            //初始化中部信息
            this.InitMiddleFrame(i_device);
            //添加设备上报事件
            this.AddDeviceReportEvent();
        }
        /// <summary>
        /// 初始化中部信息
        /// </summary>
        /// <param name="i_device">设备对象</param>
        /// <param name="backWidth">白色背景的宽度(非真实值)</param>
        /// <param name="backHeight">白色背景的高度(非真实值)</param>
        private void InitMiddleFrame(CommonDevice i_device)
        {
            this.device = i_device;
            this.nowDeviceFuncType = device.DfunctionType;
            //清空bodyFrame
            this.ClearBodyFrame();
            //白色背景控件
            var frameWhiteBack = new FrameLayout();
            frameWhiteBack.Y = Application.GetRealHeight(115);
            frameWhiteBack.Width = Application.GetRealWidth(this.backFrameWidth);
            frameWhiteBack.Height = Application.GetRealHeight(this.backFrameHeight);
            frameWhiteBack.BackgroundColor = UserCenterColor.Current.White;
            frameWhiteBack.Radius = (uint)Application.GetRealHeight(17);
            frameWhiteBack.Gravity = Gravity.CenterHorizontal;
            bodyFrameLayout.AddChidren(frameWhiteBack);
            //设备名称
            this.btnDeviceName = new NormalViewControl(100, 60, true);
            btnDeviceName.Y = Application.GetRealHeight(46);
            btnDeviceName.TextSize = 15;
            btnDeviceName.IsBold = true;
            btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device);
            btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
            btnDeviceName.TextAlignment = TextAlignment.Center;
            btnDeviceName.Gravity = Gravity.CenterHorizontal;
            frameWhiteBack.AddChidren(btnDeviceName);
            //状态
            this.btnStatu = new NormalViewControl(700, 42, true);
            btnStatu.Y = btnDeviceName.Bottom + Application.GetRealHeight(12);
            btnStatu.TextSize = 10;
            btnStatu.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnStatu.TextAlignment = TextAlignment.Center;
            btnStatu.Gravity = Gravity.CenterHorizontal;
            frameWhiteBack.AddChidren(btnStatu);
            //房间的黑色背景
            var frameRoomBlack = new FrameLayout();
            frameRoomBlack.Height = Application.GetRealHeight(138);
            frameRoomBlack.Width = frameWhiteBack.Width;
            frameRoomBlack.BackgroundColor = 0xff232323;
            frameRoomBlack.Radius= (uint)Application.GetRealHeight(17);
            frameRoomBlack.Gravity = Gravity.BottomCenter;
            frameWhiteBack.AddChidren(frameRoomBlack);
            //让上部变直角(因为安卓这里,单独指定左下和右下角圆角的话,圆不了)
            var frameTemp = new FrameLayout();
            frameTemp.Height = Application.GetRealHeight(30);
            frameTemp.Width = frameWhiteBack.Width;
            frameTemp.BackgroundColor = frameRoomBlack.BackgroundColor;
            frameRoomBlack.AddChidren(frameTemp);
            //房间图标
            var btnRoomIcon = new IconViewControl(81);
            btnRoomIcon.X = ControlCommonResourse.XXLeft;
            btnRoomIcon.UnSelectedImagePath = "Item/Room.png";
            btnRoomIcon.Gravity = Gravity.CenterVertical;
            frameRoomBlack.AddChidren(btnRoomIcon);
            //房间名称
            this.btnRoomName = new NormalViewControl(600, 52, true);
            btnRoomName.X = btnRoomIcon.Right + Application.GetRealWidth(12);
            btnRoomName.TextSize = 12;
            btnRoomName.TextColor = UserCenterColor.Current.White;
            btnRoomName.Gravity = Gravity.CenterVertical;
            if (this.nowSelectRoom != null)
            {
                btnRoomName.Text = this.nowSelectRoom.Name;
            }
            else
            {
                //未分配
                btnRoomName.TextID = R.MyInternationalizationString.uDeviceNotAssignedRoom;
            }
            frameRoomBlack.AddChidren(btnRoomName);
            //收藏
            var btnCollect = new IconBigViewControl(69, 69);
            btnCollect.UnSelectedImagePath = "Item/Collection.png";
            btnCollect.SelectedImagePath = "Item/CollectionSelected.png";
            btnCollect.IsSelected = HdlRoomLogic.Current.IsCollectInRoom(i_device);
            frameWhiteBack.AddChidren(btnCollect);
            btnCollect.InitControl();
            btnCollect.X = Application.GetRealWidth(850) - btnCollect.XOffset;
            btnCollect.Y = Application.GetRealHeight(35) - btnCollect.YOffset;
            btnCollect.ButtonClickEvent += (sender, e) =>
            {
                //状态取反
                btnCollect.IsSelected = !btnCollect.IsSelected;
                if (btnCollect.IsSelected == false)
                {
                    //取消收藏
                    HdlRoomLogic.Current.DeleteLoveDevice(i_device);
                }
                else
                {
                    //添加收藏
                    HdlRoomLogic.Current.AddLoveDevice(i_device);
                }
            };
            //底层初始化中部控件完成之后,调用各自界面的初始化函数
            this.InitMiddleFrameAfter(frameWhiteBack);
        }
        /// <summary>
        /// 底层初始化中部控件完成之后
        /// </summary>
        /// <param name="frameWhiteBack">白色背景控件</param>
        public virtual void InitMiddleFrameAfter(FrameLayout frameWhiteBack)
        {
        }
        #endregion
        #region ■ 是否获取网关反馈的结果_____________
        /// <summary>
        /// 检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
        /// </summary>
        /// <param name="listControl">需要限制不能点击的控件(超时时,它会还原Select状态)</param>
        /// <param name="lastAction">函数运行完成后的回调函数。参数false:没有等到网关回复 true:接收到了网关回复</param>
        public void StartCheckResponeResult(List<ButtonBase> listControl, Action<bool> lastAction = null)
        {
            this.ResponeResult = 0;
            //先让指定控件不能点击
            foreach (var myContr in listControl)
            {
                myContr.CanClick = false;
            }
            HdlThreadLogic.Current.RunThread(() =>
            {
                int waitime = 40;
                while (waitime > 0)
                {
                    System.Threading.Thread.Sleep(100);
                    if (this.ResponeResult == 1)
                    {
                        //已经获取得到数据
                        break;
                    }
                    waitime--;
                    //2秒的时候,还是接受不到的话,强制再次刷新设备状态
                    if (waitime == 20)
                    {
                        //从新发送获取设备的状态(强制)
                        this.device.HadReadDeviceStatu = false;
                        if (this.RowOrCardControl != null)
                        {
                            this.RowOrCardControl.GetType().InvokeMember("SendStatuComand", System.Reflection.BindingFlags.InvokeMethod, null, this.RowOrCardControl, null);
                        }
                    }
                }
                if (waitime <= 0 && this.Parent != null)
                {
                    //没有获取得到结果
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FAIL));
                        msgContr.Show();
                    });
                }
                //开关按钮可以再点击
                foreach (var myContr in listControl)
                {
                    myContr.CanClick = true;
                }
                //函数运行完成的回调函数
                lastAction?.Invoke(this.ResponeResult == 1);
                lastAction = null;
            });
        }
        /// <summary>
        /// 检测网关的反馈结果(属性上报的对象:device.DeviceStatusReport)
        /// </summary>
        /// <param name="comandDiv">命令区分</param>
        /// <param name="report">上报数据</param>
        public virtual bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report)
        {
            return false;
        }
        /// <summary>
        /// 添加设备上报事件
        /// </summary>
        private void AddDeviceReportEvent()
        {
            string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(this.device);
            //属性上报
            HdlGatewayReceiveLogic.Current.AddAttributeEvent("DeviceDetailCardAttribute" + mainKeys, ReceiveComandDiv.A设备属性上报, (report) =>
            {
                string mainKey2 = Common.LocalDevice.Current.GetDeviceMainKeys(report);
                if (mainKeys != mainKey2)
                {
                    //不是同一个东西
                    return;
                }
                //检测结果
                if (this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, report) == true)
                {
                    //结果已经接收到
                    this.ResponeResult = 1;
                }
            });
        }
        #endregion
        #region ■ 界面重新激活事件___________________
        /// <summary>
        /// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
        /// </summary>
        public override int FormActionAgainEvent()
        {
            //如果不是喜爱房间的话,它的房间有可能被切换了
            if (this.nowSelectRoom == null || this.nowSelectRoom.IsLove == false)
            {
                this.nowSelectRoom = HdlRoomLogic.Current.GetRoomByDevice(this.device);
            }
            //如果功能类型变更了
            if (this.nowDeviceFuncType != this.device.DfunctionType)
            {
                //重新刷新界面,初始化中部信息
                this.InitMiddleFrame(this.device);
            }
            else
            {
                //刷新名字
                this.btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(this.device);
                btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
                btnDeviceName.Gravity = Gravity.CenterHorizontal;
                if (this.nowSelectRoom == null)
                {
                    //未分配
                    this.btnRoomName.TextID = R.MyInternationalizationString.uDeviceNotAssignedRoom;
                }
                else
                {
                    this.btnRoomName.Text = this.nowSelectRoom.Name;
                }
            }
            return 1;
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(this.device);
            HdlGatewayReceiveLogic.Current.RemoveEvent("DeviceDetailCardAttribute" + mainKeys);
            //回调函数
            this.FormCloseEvent?.Invoke(this.device);
            this.FormCloseEvent = null;
            base.CloseFormBefore();
        }
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 设置状态文本(不需要指定【当前两个字】)
        /// </summary>
        /// <param name="text"></param>
        public void SetStatuText(string text)
        {
            this.btnStatu.Text = this.CurrentText + text;
        }
        /// <summary>
        /// 设置PM2.5传感器状态文本(不需要指定【当前两个字】)
        /// </summary>
        /// <param name="text"></param>
        public void SetPmTwoPointFiveStatuText(string text)
        {
            this.btnStatu.Text = text;
        }
        /// <summary>
        /// 重新设置设备名字控件和状态控件的Y轴
        /// </summary>
        /// <param name="i_NameY">设备名字控件的Y轴(真实值)</param>
        /// <param name="i_StatuY">状态控件的Y轴(真实值)</param>
        public void ResetDeviceNameAndStatuPoint(int i_NameY, int i_StatuY)
        {
            btnDeviceName.Y = i_NameY;
            btnStatu.Y = i_StatuY;
        }
        #endregion
    }
    public Action<CommonDevice> FormCloseEvent = null;
    /// <summary>
    /// 设备对象
    /// </summary>
    public CommonDevice device = null;
    /// <summary>
    /// 当前选择的房间对象(再次刷新界面时,这个东西有可能是null)
    /// </summary>
    public Common.Room nowSelectRoom = null;
    /// <summary>
    /// 标记它是由哪个控件调起的
    /// </summary>
    public ViewGroup RowOrCardControl = null;
    /// <summary>
    /// 状态控件
    /// </summary>
    private NormalViewControl btnStatu = null;
    /// <summary>
    /// 设备名称控件
    /// </summary>
    private NormalViewControl btnDeviceName = null;
    /// <summary>
    /// 房间名称
    /// </summary>
    private NormalViewControl btnRoomName = null;
    /// <summary>
    /// 是否获取网关反馈的结果  0:没有获取得到  1:已经获取得到
    /// </summary>
    public int ResponeResult = 0;
    /// <summary>
    /// 当前端点的功能类型
    /// </summary>
    private DeviceFunctionType nowDeviceFuncType = DeviceFunctionType.A未定义;
    /// <summary>
    /// 白色背景的宽度
    /// </summary>
    private int backFrameWidth = 0;
    /// <summary>
    /// 白色背景的高度
    /// </summary>
    private int backFrameHeight = 0;
    /// <summary>
    /// 当前的文本
    /// </summary>
    private string CurrentText = string.Empty;
    #endregion
    #region ■ 初始化_____________________________
    /// <summary>
    /// 画面显示(底层会固定调用此方法,借以完成画面创建)
    /// </summary>
    /// <param name="i_device">设备对象</param>
    /// <param name="i_nowSelectRoom">房间</param>
    /// <param name="i_backWidth">白色背景的宽度(非真实值)</param>
    /// <param name="i_backHeight">白色背景的高度(非真实值)</param>
    public void ShowForm(CommonDevice i_device, Common.Room i_nowSelectRoom, int i_backWidth, int i_backHeight)
    {
      this.CurrentText = Language.StringByID(R.MyInternationalizationString.Current) + "  ";
      this.nowSelectRoom = i_nowSelectRoom;
      this.backFrameWidth = i_backWidth;
      this.backFrameHeight = i_backHeight;
      //更多
      var btnMore = new MostRightIconControl(69, 69);
      btnMore.UnSelectedImagePath = "Item/More.png";
      topFrameLayout.AddChidren(btnMore);
      btnMore.InitControl();
      btnMore.ButtonClickEvent += (sender, e) =>
      {
        //获取设备属于【晾衣架】
        var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice> { device });
        if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.Airer)
        {
          var form = new Shared.Phone.UserCenter.Device.DeviceFunctionSettionForm();
          form.AddForm(device, true);
        }
        else
        {
          var detailInfo = new DeviceDetailInfoForm();
          detailInfo.AddForm(device, nowSelectRoom);
        }
      };
      //初始化中部信息
      this.InitMiddleFrame(i_device);
      //添加设备上报事件
      this.AddDeviceReportEvent();
    }
    /// <summary>
    /// 初始化中部信息
    /// </summary>
    /// <param name="i_device">设备对象</param>
    /// <param name="backWidth">白色背景的宽度(非真实值)</param>
    /// <param name="backHeight">白色背景的高度(非真实值)</param>
    private void InitMiddleFrame(CommonDevice i_device)
    {
      this.device = i_device;
      this.nowDeviceFuncType = device.DfunctionType;
      //清空bodyFrame
      this.ClearBodyFrame();
      //白色背景控件
      var frameWhiteBack = new FrameLayout();
      frameWhiteBack.Y = Application.GetRealHeight(115);
      frameWhiteBack.Width = Application.GetRealWidth(this.backFrameWidth);
      frameWhiteBack.Height = Application.GetRealHeight(this.backFrameHeight);
      frameWhiteBack.BackgroundColor = UserCenterColor.Current.White;
      frameWhiteBack.Radius = (uint)Application.GetRealHeight(17);
      frameWhiteBack.Gravity = Gravity.CenterHorizontal;
      bodyFrameLayout.AddChidren(frameWhiteBack);
      //设备名称
      this.btnDeviceName = new NormalViewControl(100, 60, true);
      btnDeviceName.Y = Application.GetRealHeight(46);
      btnDeviceName.TextSize = 15;
      btnDeviceName.IsBold = true;
      btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device);
      btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
      btnDeviceName.TextAlignment = TextAlignment.Center;
      btnDeviceName.Gravity = Gravity.CenterHorizontal;
      frameWhiteBack.AddChidren(btnDeviceName);
      //状态
      this.btnStatu = new NormalViewControl(700, 42, true);
      btnStatu.Y = btnDeviceName.Bottom + Application.GetRealHeight(12);
      btnStatu.TextSize = 10;
      btnStatu.TextColor = UserCenterColor.Current.TextGrayColor1;
      btnStatu.TextAlignment = TextAlignment.Center;
      btnStatu.Gravity = Gravity.CenterHorizontal;
      frameWhiteBack.AddChidren(btnStatu);
      //房间的黑色背景
      var frameRoomBlack = new FrameLayout();
      frameRoomBlack.Height = Application.GetRealHeight(138);
      frameRoomBlack.Width = frameWhiteBack.Width;
      frameRoomBlack.BackgroundColor = 0xff232323;
      frameRoomBlack.Radius = (uint)Application.GetRealHeight(17);
      frameRoomBlack.Gravity = Gravity.BottomCenter;
      frameWhiteBack.AddChidren(frameRoomBlack);
      //让上部变直角(因为安卓这里,单独指定左下和右下角圆角的话,圆不了)
      var frameTemp = new FrameLayout();
      frameTemp.Height = Application.GetRealHeight(30);
      frameTemp.Width = frameWhiteBack.Width;
      frameTemp.BackgroundColor = frameRoomBlack.BackgroundColor;
      frameRoomBlack.AddChidren(frameTemp);
      //房间图标
      var btnRoomIcon = new IconViewControl(81);
      btnRoomIcon.X = ControlCommonResourse.XXLeft;
      btnRoomIcon.UnSelectedImagePath = "Item/Room.png";
      btnRoomIcon.Gravity = Gravity.CenterVertical;
      frameRoomBlack.AddChidren(btnRoomIcon);
      //房间名称
      this.btnRoomName = new NormalViewControl(600, 52, true);
      btnRoomName.X = btnRoomIcon.Right + Application.GetRealWidth(12);
      btnRoomName.TextSize = 12;
      btnRoomName.TextColor = UserCenterColor.Current.White;
      btnRoomName.Gravity = Gravity.CenterVertical;
      if (this.nowSelectRoom != null)
      {
        btnRoomName.Text = this.nowSelectRoom.Name;
      }
      else
      {
        //未分配
        btnRoomName.TextID = R.MyInternationalizationString.uDeviceNotAssignedRoom;
      }
      frameRoomBlack.AddChidren(btnRoomName);
      //收藏
      var btnCollect = new IconBigViewControl(69, 69);
      btnCollect.UnSelectedImagePath = "Item/Collection.png";
      btnCollect.SelectedImagePath = "Item/CollectionSelected.png";
      btnCollect.IsSelected = HdlRoomLogic.Current.IsCollectInRoom(i_device);
      frameWhiteBack.AddChidren(btnCollect);
      btnCollect.InitControl();
      btnCollect.X = Application.GetRealWidth(850) - btnCollect.XOffset;
      btnCollect.Y = Application.GetRealHeight(35) - btnCollect.YOffset;
      btnCollect.ButtonClickEvent += (sender, e) =>
      {
        //状态取反
        btnCollect.IsSelected = !btnCollect.IsSelected;
        if (btnCollect.IsSelected == false)
        {
          //取消收藏
          HdlRoomLogic.Current.DeleteLoveDevice(i_device);
        }
        else
        {
          //添加收藏
          HdlRoomLogic.Current.AddLoveDevice(i_device);
        }
      };
      //底层初始化中部控件完成之后,调用各自界面的初始化函数
      this.InitMiddleFrameAfter(frameWhiteBack);
    }
    /// <summary>
    /// 底层初始化中部控件完成之后
    /// </summary>
    /// <param name="frameWhiteBack">白色背景控件</param>
    public virtual void InitMiddleFrameAfter(FrameLayout frameWhiteBack)
    {
    }
    #endregion
    #region ■ 是否获取网关反馈的结果_____________
    /// <summary>
    /// 检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
    /// </summary>
    /// <param name="listControl">需要限制不能点击的控件(超时时,它会还原Select状态)</param>
    /// <param name="lastAction">函数运行完成后的回调函数。参数false:没有等到网关回复 true:接收到了网关回复</param>
    public void StartCheckResponeResult(List<ButtonBase> listControl, Action<bool> lastAction = null)
    {
      this.ResponeResult = 0;
      //先让指定控件不能点击
      foreach (var myContr in listControl)
      {
        myContr.CanClick = false;
      }
      HdlThreadLogic.Current.RunThread(() =>
      {
        int waitime = 40;
        while (waitime > 0)
        {
          System.Threading.Thread.Sleep(100);
          if (this.ResponeResult == 1)
          {
            //已经获取得到数据
            break;
          }
          waitime--;
          //2秒的时候,还是接受不到的话,强制再次刷新设备状态
          if (waitime == 20)
          {
            //从新发送获取设备的状态(强制)
            this.device.HadReadDeviceStatu = false;
            if (this.RowOrCardControl != null)
            {
              this.RowOrCardControl.GetType().InvokeMember("SendStatuComand", System.Reflection.BindingFlags.InvokeMethod, null, this.RowOrCardControl, null);
            }
          }
        }
        if (waitime <= 0 && this.Parent != null)
        {
          //没有获取得到结果
          HdlThreadLogic.Current.RunMain(() =>
          {
            var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FAIL));
            msgContr.Show();
          });
        }
        //开关按钮可以再点击
        foreach (var myContr in listControl)
        {
          myContr.CanClick = true;
        }
        //函数运行完成的回调函数
        lastAction?.Invoke(this.ResponeResult == 1);
        lastAction = null;
      });
    }
    /// <summary>
    /// 检测网关的反馈结果(属性上报的对象:device.DeviceStatusReport)
    /// </summary>
    /// <param name="comandDiv">命令区分</param>
    /// <param name="report">上报数据</param>
    public virtual bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report)
    {
      return false;
    }
    /// <summary>
    /// 添加设备上报事件
    /// </summary>
    private void AddDeviceReportEvent()
    {
      string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(this.device);
      //属性上报
      HdlGatewayReceiveLogic.Current.AddAttributeEvent("DeviceDetailCardAttribute" + mainKeys, ReceiveComandDiv.A设备属性上报, (report) =>
      {
        string mainKey2 = Common.LocalDevice.Current.GetDeviceMainKeys(report);
        if (this.device.Type == DeviceType.Airer && this.device.DeviceAddr == report.DeviceAddr)
        {
          //晾衣架特殊:5个回路代表不同的功能,但是默认本地只显示了第一个回路
          //所以条件特殊判断
          //检测结果
          if (this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, report) == true)
          {
            //结果已经接收到
            this.ResponeResult = 1;
          }
        }
        else
        {
          if (mainKeys != mainKey2)
          {
            //不是同一个东西
            return;
          }
          //检测结果
          if (this.CheckResponeResultStatu(ReceiveComandDiv.A设备属性上报, report) == true)
          {
            //结果已经接收到
            this.ResponeResult = 1;
          }
        }
      });
    }
    #endregion
    #region ■ 界面重新激活事件___________________
    /// <summary>
    /// 自身的上层界面关闭后,它自身处于最上层时,触发的事件
    /// </summary>
    public override int FormActionAgainEvent()
    {
      //如果不是喜爱房间的话,它的房间有可能被切换了
      if (this.nowSelectRoom == null || this.nowSelectRoom.IsLove == false)
      {
        this.nowSelectRoom = HdlRoomLogic.Current.GetRoomByDevice(this.device);
      }
      //如果功能类型变更了
      if (this.nowDeviceFuncType != this.device.DfunctionType)
      {
        //重新刷新界面,初始化中部信息
        this.InitMiddleFrame(this.device);
      }
      else
      {
        //刷新名字
        this.btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(this.device);
        btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
        btnDeviceName.Gravity = Gravity.CenterHorizontal;
        if (this.nowSelectRoom == null)
        {
          //未分配
          this.btnRoomName.TextID = R.MyInternationalizationString.uDeviceNotAssignedRoom;
        }
        else
        {
          this.btnRoomName.Text = this.nowSelectRoom.Name;
        }
      }
      return 1;
    }
    #endregion
    #region ■ 界面关闭___________________________
    /// <summary>
    /// 界面关闭
    /// </summary>
    public override void CloseFormBefore()
    {
      string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(this.device);
      HdlGatewayReceiveLogic.Current.RemoveEvent("DeviceDetailCardAttribute" + mainKeys);
      //回调函数
      this.FormCloseEvent?.Invoke(this.device);
      this.FormCloseEvent = null;
      base.CloseFormBefore();
    }
    #endregion
    #region ■ 一般方法___________________________
    /// <summary>
    /// 设置状态文本(不需要指定【当前两个字】)
    /// </summary>
    /// <param name="text"></param>
    public void SetStatuText(string text)
    {
      this.btnStatu.Text = this.CurrentText + text;
    }
    /// <summary>
    /// 设置PM2.5传感器状态文本(不需要指定【当前两个字】)
    /// </summary>
    /// <param name="text"></param>
    public void SetPmTwoPointFiveStatuText(string text)
    {
      this.btnStatu.Text = text;
    }
    /// <summary>
    /// 重新设置设备名字控件和状态控件的Y轴
    /// </summary>
    /// <param name="i_NameY">设备名字控件的Y轴(真实值)</param>
    /// <param name="i_StatuY">状态控件的Y轴(真实值)</param>
    public void ResetDeviceNameAndStatuPoint(int i_NameY, int i_StatuY)
    {
      btnDeviceName.Y = i_NameY;
      btnStatu.Y = i_StatuY;
    }
    #endregion
  }
}