using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Uestc.Auto6.Dso.Core; using Uni_Trend.MSO7000X.Language; using Uni_Trend.MSO7000X.Common.Helper; using Uni_Trend.MSO7000X.UserControls; using Uestc.Auto6.Dso.ComModel; using Uestc.Auto6.Dso.Core.Decode; using System.Reflection; namespace Uestc.Auto6.Dso.Protocol.LIN { [System.ComponentModel.ToolboxItem(false)] public partial class LINTriggerSetControl : UserControl, ITriggerSerialView { #region 属性定义 protected new Boolean DesignMode { get { Boolean rtnflag = false; #if DEBUG rtnflag = DesignTimeHelper.InDesignMode(this); #endif return rtnflag; } } public LINTrigSerialPrsnt Presenter { get => (LINTrigSerialPrsnt)(ParentForm as ITriggerView).Presenter; set => (ParentForm as ITriggerView).Presenter = value; } ITriggerPrsnt IView.Presenter { get => Presenter; set => Presenter = (LINTrigSerialPrsnt)value; } #endregion 属性定义 public LINTriggerSetControl() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); InitView(); Init(); UpdateView(); } private void InitView() { Uni_Trend.MSO7000X.UserControls.Style.DefaultStyleManager.Instance.RegisterControlRecursion(this, Uni_Trend.MSO7000X.UserControls.Style.StyleFlag.FontSize); } private void Init() { InitData(); InitDataRelation(); InitID(); } private void InitDataRelation() { CbxDataRelation.DataSource = Enum.GetValues().GetEnumList(); CbxDataRelation.DisplayMember = "Key"; CbxDataRelation.ValueMember = "Value"; CbxDataRelation.SelectedValueChanged += (_, _) => { Presenter.DataRelation = (ProtocolLIN.DataRelation)CbxDataRelation.SelectedValue; }; } private void InitID() { BtnID.Click += (_, _) => { SetID(); }; } private void InitData() { BtnData.Click += (_, _) => { SetData(); }; } private void SetData() { Boolean lastflag = true; if (this.FindForm() is FloatForm form) { lastflag = form.CanClose; form.CanClose = false; } FloatForm floatForm = new FloatForm(); floatForm = new Uni_Trend.MSO7000X.UserControls.FloatForm(); floatForm.BackColor = BackColor; floatForm.ForeColor = ForeColor; floatForm.Width = 380; floatForm.Height = 460 + floatForm.HeadHeight; floatForm.Title = "设置Data"; Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard numberKeyboard = new Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard(); numberKeyboard.Controls.Cast().ToList().ForEach(x => Uni_Trend.MSO7000X.UserControls.Style.DefaultStyleManager.Instance.RegisterControl(x)); numberKeyboard.Top = floatForm.HeadHeight; numberKeyboard.Height = floatForm.Height - floatForm.HeadHeight; numberKeyboard.Width = floatForm.Width; numberKeyboard.ForeColor = ForeColor; numberKeyboard.BackColor = BackColor; numberKeyboard.Value = Presenter.Data; numberKeyboard.MinValue = Presenter.MinData; numberKeyboard.ValueType = HexNumberKeyboard.HexValueType.Hex; numberKeyboard.MaxValue = Presenter.MaxData; numberKeyboard.OkClick += (sender, args) => { Presenter.ID = (Byte)args.Data; floatForm?.Close(); }; numberKeyboard.CancelClick += (sender, args) => floatForm?.Close(); floatForm.Controls.Add(numberKeyboard); floatForm.FormClosing += (_, _) => { if (this.FindForm() is FloatForm form) form.CanClose = lastflag; }; floatForm.ShowDialogByPosition(); } private void SetID() { Boolean lastflag = true; if (this.FindForm() is FloatForm form) { lastflag = form.CanClose; form.CanClose = false; } FloatForm floatForm = new FloatForm(); floatForm = new Uni_Trend.MSO7000X.UserControls.FloatForm(); floatForm.BackColor = BackColor; floatForm.ForeColor = ForeColor; floatForm.Width = 380; floatForm.Height = 460 + floatForm.HeadHeight; floatForm.Title = "设置ID"; Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard numberKeyboard = new Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard(); numberKeyboard.Controls.Cast().ToList().ForEach(x => Uni_Trend.MSO7000X.UserControls.Style.DefaultStyleManager.Instance.RegisterControl(x)); numberKeyboard.Top = floatForm.HeadHeight; numberKeyboard.Height = floatForm.Height - floatForm.HeadHeight; numberKeyboard.Width = floatForm.Width; numberKeyboard.ForeColor = ForeColor; numberKeyboard.BackColor = BackColor; numberKeyboard.Value = Presenter.ID; numberKeyboard.MinValue = Presenter.MinID; numberKeyboard.ValueType = HexNumberKeyboard.HexValueType.Hex; numberKeyboard.MaxValue = Presenter.MaxID; numberKeyboard.OkClick += (sender, args) => { Presenter.ID = (Byte)args.Data; floatForm?.Close(); }; numberKeyboard.CancelClick += (sender, args) => floatForm?.Close(); floatForm.Controls.Add(numberKeyboard); floatForm.FormClosing += (_, _) => { if (this.FindForm() is FloatForm form) form.CanClose = lastflag; }; floatForm.ShowDialogByPosition(); } public void UpdateView(Object presenter, String propertyName) { if(String.IsNullOrEmpty(propertyName)) { UpdateView(); return; } this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(x => { var attr = x.GetCustomAttribute(); return attr != null && attr.PropertyName == propertyName; }).FirstOrDefault()?.Invoke(this, null); } private void UpdateView() { this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).Where(x => x.GetCustomAttribute() != null).ToList().ForEach(x => x?.Invoke(this, null)); this.Refresh(); } [UpdateProperty(nameof(LINTrigSerialPrsnt.Condition))] private void UpdateCondition() { switch(Presenter.Condition) { case ProtocolLIN.Condition.Data: LblDataRelation.Visible = true; CbxDataRelation.Visible = true; LblData.Visible = true; BtnData.Visible = true; LblID.Visible = false; BtnID.Visible = false; SetColnum(0, 2, LblDataRelation, CbxDataRelation); SetColnum(1, 2, LblData, BtnData); Visible = true; break; case ProtocolLIN.Condition.ID: LblDataRelation.Visible = true; CbxDataRelation.Visible = true; LblData.Visible = false; BtnData.Visible = false; LblID.Visible = true; BtnID.Visible = true; SetColnum(0, 2, LblDataRelation, CbxDataRelation); SetColnum(1, 2, LblID, BtnID); Visible = true; break; default: LblDataRelation.Visible = false; CbxDataRelation.Visible = false; LblData.Visible = false; BtnData.Visible = false; LblID.Visible = false; BtnID.Visible = false; Visible = false; break; } } private void SetColnum(Int32 colnum,Int32 maxColnumCount,params Control[] controls) { Array.ForEach(controls, x => x.Left = this.Width / maxColnumCount * colnum+14); } [UpdateProperty(nameof(LINTrigSerialPrsnt.DataRelation))] private void UpdateDataRelation() { CbxDataRelation.SelectedValue = Presenter.DataRelation; } [UpdateProperty(nameof(LINTrigSerialPrsnt.Data))] private void UpdateData() { BtnData.Text = $"0x{Presenter.Data:X2}"; } [UpdateProperty(nameof(LINTrigSerialPrsnt.ID))] private void UpdateID() { BtnID.Text = $"0x{Presenter.ID:X2}"; } } }