| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | using Caliburn.Micro;using MECF.Framework.UI.Client.CenterViews.Dialogs;using MECF.Framework.UI.Client.ClientBase;using OpenSEMI.ClientBase;using OpenSEMI.Ctrlib.Controls;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Input;using TextBox2 = OpenSEMI.Ctrlib.Controls.TextBoxEx;namespace MECF.Framework.UI.Client.Themes.lightgreen{    public partial class TextBoxEx2 : ResourceDictionary    {        private static Regex RegNumber = new Regex("^[0-9]+$");        private static Regex RegNumberSign = new Regex("^[+-]?[0-9]+$");        private static Regex RegDecimal = new Regex("^[0-9]+[.]?[0-9]+$");        private static Regex RegDecimalSign = new Regex("^[+-]?[0-9]+[.]?[0-9]+$"); //等价于^[+-]?\d+[.]?\d+$        private static Regex RegEmail = new Regex("^[\\w-]+@[\\w-]+\\.(com|net|org|edu|mil|tv|biz|info)$");        /// <summary>        /// 是否数字字符串        /// </summary>        /// <param name="inputData">输入字符串</param>        /// <returns></returns>        public static bool IsNumber(string inputData)        {            Match m = RegNumber.Match(inputData);            return m.Success;        }        /// <summary>        /// 是否数字字符串 可带正负号        /// </summary>        /// <param name="inputData">输入字符串</param>        /// <returns></returns>        public static bool IsNumberSign(string inputData)        {            Match m = RegNumberSign.Match(inputData);            return m.Success;        }        /// <summary>        /// 是否是浮点数        /// </summary>        /// <param name="inputData">输入字符串</param>        /// <returns></returns>        public static bool IsDecimal(string inputData)        {            Match m = RegDecimal.Match(inputData);            return m.Success;        }        /// <summary>        /// 是否是浮点数 可带正负号        /// </summary>        /// <param name="inputData">输入字符串</param>        /// <returns></returns>        public static bool IsDecimalSign(string inputData)        {            Match m = RegDecimalSign.Match(inputData);            return m.Success;        }        public void TextBoxExOnClick(object sender, MouseButtonEventArgs e)        {            if (sender is TextBox2)            {                TextBox2 textBox = sender as TextBox2;                string strRet = Show(sender, textBox.Text);                if (string.IsNullOrEmpty(strRet)) return;                if (!CheckEditBoxMode(textBox, strRet))                {                    DialogBox.ShowInfo($"Please enter the corresponding type data {textBox.EditBoxMode.ToString()}");                    return;                }                if (!textBox.AllowIsOutOfRangeSaveChange && textBox.IsOutOfRange(double.Parse(strRet)))                {                    DialogBox.ShowInfo($"Out Of Range{textBox.MinValue}-{textBox.MaxValue}");                    return;                }                if (textBox.EditBoxMode == EditBoxMode.SignInteger || textBox.EditBoxMode == EditBoxMode.UnSignInteger || textBox.EditBoxMode == EditBoxMode.Decimal || textBox.EditBoxMode == EditBoxMode.UnSignDecimal)                {                    var controlValue = double.Parse(strRet);                    if (textBox.KeepDecimals != -1)                    {                        if (textBox.KeepIntegers != -1)                        {                            StringBuilder strFormat = new StringBuilder();                            for (int i = 0; i < textBox.KeepIntegers; i++)                            {                                strFormat.Append("0");                            }                            strFormat.Append(".");                            for (int i = 0; i < textBox.KeepDecimals; i++)                            {                                strFormat.Append("0");                            }                            textBox.Text = controlValue.ToString(strFormat.ToString());                        }                        else                        { textBox.Text = controlValue.ToString($"f{textBox.KeepDecimals}"); }                    }                    else                    {                        if (textBox.KeepIntegers != -1)                        {                            textBox.Text = ((int)controlValue).ToString($"D{textBox.KeepIntegers}");                        }                        else                        { textBox.Text = controlValue.ToString(); }                    }                }                else                {                    textBox.Text = strRet;                }            }        }        private bool CheckEditBoxMode(TextBox2 boxEx, string value)        {            bool modeIsOk = false;            switch (boxEx.EditBoxMode)            {                case OpenSEMI.Ctrlib.Controls.EditBoxMode.Default:                case OpenSEMI.Ctrlib.Controls.EditBoxMode.Email:                case OpenSEMI.Ctrlib.Controls.EditBoxMode.Time:                case OpenSEMI.Ctrlib.Controls.EditBoxMode.FileName:                    modeIsOk = true;                    break;                case OpenSEMI.Ctrlib.Controls.EditBoxMode.SignInteger:                    modeIsOk = IsNumberSign(value);                    break;                case OpenSEMI.Ctrlib.Controls.EditBoxMode.UnSignInteger:                    modeIsOk = IsNumber(value);                    break;                case OpenSEMI.Ctrlib.Controls.EditBoxMode.Decimal:                    modeIsOk = IsDecimalSign(value) || IsNumberSign(value);                    break;                case OpenSEMI.Ctrlib.Controls.EditBoxMode.UnSignDecimal:                    modeIsOk = IsDecimal(value) || IsNumber(value);                    break;                default:                    break;            }            return modeIsOk;        }        private string Show(object sender, string strDefaultValue)        {            Control control = sender as Control;            string strRet = string.Empty;            if (control.Tag != null && control.Tag.ToString().Equals("Number"))            {                var point = control.PointFromScreen(new Point(0, 0));                double x = SystemParameters.WorkArea.Width;                double y = SystemParameters.WorkArea.Height;                NumberKeyboard numberKeyboard = new NumberKeyboard("", strDefaultValue);                if (-point.Y + control.ActualHeight + 5 + numberKeyboard.Height < y)                {                    numberKeyboard.Top = -point.Y + control.ActualHeight + 5;                }                else                {                    numberKeyboard.Top = -point.Y - numberKeyboard.Height - 5;                }                if (-point.X + numberKeyboard.Width < x)                {                    numberKeyboard.Left = -point.X;                }                else                {                    numberKeyboard.Left = -point.X - (numberKeyboard.Width - control.ActualWidth);                }                if ((bool)numberKeyboard.ShowDialog()) strRet = numberKeyboard.ValueString;            }            else if (control.Tag != null && control.Tag.ToString().Contains("None"))            {                return string.Empty;            }            else            {                FullKeyboard fullKeyboard = new FullKeyboard("", strDefaultValue);                var point = control.PointFromScreen(new Point(0, 0));                double x = SystemParameters.WorkArea.Width;                double y = SystemParameters.WorkArea.Height;                if (-point.Y + control.ActualHeight + 5 + fullKeyboard.Height < y)                {                    fullKeyboard.Top = -point.Y + control.ActualHeight + 5;                }                else                {                    fullKeyboard.Top = -point.Y - fullKeyboard.Height - 5;                }                if (-point.X + fullKeyboard.Width < x)                {                    fullKeyboard.Left = -point.X;                }                else                {                    fullKeyboard.Left = -point.X - (fullKeyboard.Width - control.ActualWidth);                }                if ((bool)fullKeyboard.ShowDialog()) strRet = fullKeyboard.ValueString;            }            return strRet;        }    }}
 |