Status.cs 4.0 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AGV_UI
{
    public partial class Status : UserControl
    {
        public Status(string name, List<string> infos)
        {
            InitializeComponent();
            AGVName = name;
            missionShow = new Dictionary<string, Control>();
            if (infos != null && infos.Count > 0)
            {
                foreach (var item in infos)
                {
                    missionShow.Add(item, new Label() { Name = item,
                        Font = new Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))),
                        AutoSize = true
                    });
                }
                flowPanelMissionState.Controls.AddRange(missionShow.Values.ToArray());
            }

        }
        public Status()
        {

        }
        public void Init()
        {
            foreach (string item in missionShow.Keys)
            {
                ShowInfo(item, "");
            }
            SetTitle();
        }
        public int MaxBattery { get; set; } = 90;
        public int MinBattery { get; set; } = 20;
        public string AGVName { get; private set; }

        #region 私有字段
        private Dictionary<string, Control> missionShow;
        #endregion
        void SetTitle()
        {
            this.Invoke(new Action(() =>
            {
                lblName.Text = AGVName;
            }
            ));
        }
        /// <summary>
        /// 设置电量
        /// </summary>
        /// <param name="curBattery"></param>
        /// <param name="isInCharge"></param>
        public void SetBattery(int curBattery, bool isInCharge = false)
        {
            object[] objs = Manager.SetBattery(curBattery, isInCharge, MinBattery, MaxBattery);
            try
            {
                this.Invoke(new Action(() =>
                {
                    if (curBattery < MinBattery)
                        lblBattery.ForeColor = Color.White;
                    else
                        lblBattery.ForeColor = Color.Black;
                    lblBattery.Text = objs[0] as string;
                    lblBattery.Image = objs[1] as Image;
                }
                ));
            }
            catch { }
        }
        /// <summary>
        /// 设置连接状态
        /// </summary>
        /// <param name="state"></param>
        public void SetConnectState(bool state = false)
        {
            Image image = Manager.SetConnState(state);
            this.Invoke(new Action(() =>
            {
                picBxConn.Image = image;
            }
            ));
        }
        public void ShowInfo(string key, string info)
        {
            this.Invoke(new Action(() =>
            {
                if (missionShow.ContainsKey(key))
                    missionShow[key].Text = string.Format("{0}:{1}",key, info);
            }
            ));
        }
        /// <summary>
        /// 设置当前任务名称
        /// </summary>
        /// <param name="taskName"></param>
        public void SetCurTask(string taskName)
        {
            this.Invoke(new Action(() =>
            {
                lblTask.Text = taskName;
            }
            ));
        }
        /// <summary>
        /// 设置agv当前状态
        /// </summary>
        /// <param name="curState"></param>
        public void SetCurState(string curState)
        {
            object[] objs = Manager.SetAGVState(curState);
            this.Invoke(new Action(() =>
            {
                lblAGVState.Text = objs[0] as string;
                lblAGVState.Image = objs[1] as Image;
            }
            ));
        }

        private void flowPanelMissionState_Click(object sender, EventArgs e)
        {
            this.OnClick(e);
        }
    }
}