| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Windows.Forms;using Aitex.Core.RT.IOCore;using Aitex.Core.Util;namespace Aitex.Core.Backend{    public partial class DO : UserControl, IIOView	{        PeriodicJob _thread;		public DO()		{			InitializeComponent();            this.Load += new EventHandler(DO_Load);            		}        void DO_Load(object sender, EventArgs e)        {            if (this.panel1.Controls.Count > 0)                return;            List<Tuple<int, int, string>> ioList = IO.GetIONameList("", IOType.DO);            //List<Tuple<int, int, string>> ioListRemote = IO.GetIONameList("remote", IOType.DO);            //foreach (var tuple in ioListRemote)            //{            //    ioList.Add(tuple);            //}            int index = 0;            foreach (var item in ioList)            {                Button button1 = new Button();                //button1.Margin = new Padding(0,0,5,5);                button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;                button1.Location = new System.Drawing.Point(index % 3 * 305, index / 3 * 30);                //button1.Name = string.Format("DO_{0}", i);                button1.Size = new System.Drawing.Size(300, 25);                button1.Text = string.Format("DO-{0}. {1}", item.Item1, item.Item3);                button1.Tag = item.Item3;                button1.BackColor = Color.LightGray;                button1.TextAlign = ContentAlignment.MiddleCenter;                button1.Font = new System.Drawing.Font("Arial,SimSun", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));                button1.UseVisualStyleBackColor = false;                button1.Click += (sender2, e2) =>                {                    var btn = (Button)sender2;                    string name = (string)btn.Tag;                    string reason;                    if (!IO.DO[name].SetValue(!IO.DO[name].Value, out reason))                    {                        MessageBox.Show(reason);                    }                };                this.panel1.Controls.Add(button1);                index++;            }            _thread = new PeriodicJob(500, OnTimer, "DOTimer", false, true);            VisibleChanged += (sender1, e1) =>            {                if (Visible) _thread.Start(); else _thread.Pause();            };        }        bool OnTimer()		{            Invoke(new Action(() =>            {                foreach (Button ctrl in this.panel1.Controls)                {                    if (ctrl != null)                    {                        string name = (string)ctrl.Tag;                        ctrl.BackColor = IO.DO[(string)ctrl.Tag].Value ? Color.Lime : Color.LightGray;                    }                }            }));            return true;		}        public void EnableTimer(bool enable)        {            if (enable)                _thread.Start();            else                _thread.Pause();        }        public void Close()        {            if (_thread != null)            _thread.Stop();        }	}}
 |