using DataEntity.Share; using DataRWDAL; using DataRWDalDrive.DB; using HandyControl.Data; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using XCommon.Log; using XCommon.Tip; using XCore; using XHandler.Class; using XHandler.Class.DataEx; using XHandler.Controls; using XImagingXhandler.XDAL; using XHandler.View.Liquids; using DataEntity; namespace XHandler.View.MethodProperty { /// /// DispenseProperty.xaml 的交互逻辑 /// public partial class DispenseProperty : System.Windows.Controls.UserControl, IMethodProperty,ILiquidObserver,ILatticeObserver,IDeviceArmObserver { public MethodDispense methodDispense { get; set; } public MethodDispense currmethodDispense = null; public MethodEx method = null; #region 全局属性变量 string isrun = ""; string status = ""; string name = ""; string label = ""; string labwareText = ""; string labwareValue = ""; string positionText = ""; string positionValue = ""; string armText = ""; string armValue = ""; public double wellVolume = 0.0d; private int[] channels = Shared.ChannelsId; string wellarray = ""; bool isNull = false; bool enableSingleWellvolume = false; List singlewellvolume = null; string liquididText = ""; string liquididValue = ""; string liquidrangeidText = ""; string liquidrangeidValue = ""; string liquidpidText = ""; string liquidpidValue = ""; bool bMix = false; bool bMultiMix = false; double mixvolume = 0.0d; int mixcount = 0; string mixAspiratePositionText = ""; int mixAspiratePositionValue = 0; double mixAspirateDistance = 0.0d; double mixAspirateSpeed = 0.0d; string mixDispensePositionText = ""; int mixDispensePositionValue = 0; double mixDispenseDistance = 0.0d; double mixDispenseSpeed = 0.0d; bool enableLiquidSensor = false; int liquidSensorCount = 0; double liquidSensorDistance = 0.0d; double liquidSensorEndDistance = 0.0d; double liquidSensorSpeed = 10d; double liquidSensorRadio = 10d; string liquidSensorDisIdText = ""; double liquidSensorDisIdValue = 0.0d; bool enableLiquidFollow = false; int liquidFollowType = 0; string liquidFollowTypeName = ""; double liquidFollowSpeed = 0.0d; double liquidFollowDistance = 0.0d; double liquidFollowArea = 0.0d; bool enableMixFollow = false; bool enableSensorBlock = false; //double liquidSensorBlockDistance = 0.0d; //string liquidSensorBlockDisIdText = ""; //double liquidSensorBlockDisIdValue = 0.0d; string dispenseBlockDisIdText = ""; int dispenseBlockDisIdValue = 0; int mark = 0; #endregion AspirateBll aspirateBll = new AspirateBll(); private Labware selectedLabware = null; int curArmSelectedIndex = -1; int curLiquidTypeSelectedIndex = -1; int curLiquidRangeSelectedIndex = -1; int curLiquidSelectedIndex = -1; int curMixAspirateSelectIndex = -1; int curMixDispenseSelectIndex = -1; public DispenseProperty() { InitializeComponent(); } bool isLiquidUpdate = false; /// /// 液体参数变更后,更新节点 /// /// 液体参数管理对象 public void ReceiveAndUpdate(LiquidManagement liquidManagement) { isLiquidUpdate = true; ObservableCollection liquidTypeList = DataModule.getInstance().GetLiquidTypes(); cbLiquidType.ItemsSource = liquidTypeList; cbLiquidType.SelectedIndex = -1; cbLiquidType.SelectedValue = methodDispense.liquididValue; ObservableCollection liquidRangeList = DataModule.getInstance().GetLiquidRanges(); cbLiquidRange.ItemsSource = liquidRangeList.OrderBy(m => Convert.ToInt32(m.liquid_range_id)); cbLiquidRange.SelectedIndex = -1; cbLiquidRange.SelectedValue = methodDispense.liquidrangeidValue; if (methodDispense.liquidpidValue == "") { cbLiquid.SelectedIndex = 0; } else { cbLiquid.SelectedValue = methodDispense.liquidpidValue; } } /// /// 实验设计台面耗材位置变更后,更新节点 /// /// public void ReceiveAndUpdate(TestDesign testDesign) { if (testDesign.srcCanvas != null && testDesign.targetCanvas != null) { //判断当前的台面选择是不是来源位置上的,如果是就更新,不是就不更新 if (comboboxTablePos.SelectedItem.ToString() == testDesign.srcCanvas.Name) { SetTableName(testDesign.targetCanvas.Name, (Labware)(((ControlLabware)testDesign.targetCanvas.Children[testDesign.targetCanvas.Children.Count - 1]).DataContext)); } else { } } } /// /// 通道设置变更后,更新节点 /// /// public void ReceiveAndUpdate() { // 获取当前设备臂信息 List deviceArmList = DeviceArmDB.GetDeviceArmFromdb(Shared.SoftwareInformation.software_information_id); Shared.DeviceArmList = deviceArmList; DeviceArm deviceArm = Shared.DeviceArmList.SingleOrDefault(x => x.software_information_id.Equals(Shared.SoftwareInformation.software_information_id) && x.device_arm_id.Equals((cbArm.SelectedItem as DeviceArm).device_arm_id) && x.arm_type.Equals(1)); tipsChannel.TotalChannels = deviceArm.channels; tipsChannel.SetTotalChannelCount(deviceArm.channels); if (deviceArm.device_arm_property == "") { tipsChannel.SelectedChannels = new List { }; tipsChannel.SetSelectedChannels(); //Shared.ChannelsId = new int[]; return; } string[] strChannels = deviceArm.device_arm_property.Trim().Split(','); int[] iChannels = new int[strChannels.Length]; for (int j = 0; j < strChannels.Length; j++) { iChannels[j] = Convert.ToInt32(strChannels[j]); } if (iChannels.Length > 0) { tipsChannel.SelectedChannels = iChannels.ToList(); tipsChannel.SetSelectedChannels(); } if (methodDispense != null) { methodDispense.channels = iChannels; } } public DispenseProperty(MethodEx method) { mark = 0; InitializeComponent(); curArmSelectedIndex = 0; curLiquidTypeSelectedIndex = 0; curLiquidRangeSelectedIndex = 0; curLiquidSelectedIndex = 0; curMixAspirateSelectIndex = 0; curMixDispenseSelectIndex = 0; List armList = DataModule.getInstance().GetDeviceArm(); cbArm.ItemsSource = armList; if (armList.Count == 2) //只有一个臂的情况下默认选中该臂 curArmSelectedIndex = 1; else curArmSelectedIndex = 0; ObservableCollection liquidTypeList = DataModule.getInstance().GetLiquidTypes(); cbLiquidType.ItemsSource = liquidTypeList; ObservableCollection liquidRangeList = DataModule.getInstance().GetLiquidRanges(); cbLiquidRange.ItemsSource = liquidRangeList.OrderBy(m => Convert.ToInt32(m.liquid_range_id)); ObservableCollection liquidList = new ObservableCollection(); Liquid liquid = new Liquid(); liquid.liquid_name = Properties.Resources.strPleaseSelect; liquidList.Add(liquid); cbLiquid.ItemsSource = liquidList; if (Shared.ChannelCount > 1) { tipsChannel.CanEdit = true; if (Shared.ChannelCount.Equals(96)) { tipsChannel.Visibility = Visibility.Collapsed; } } if (Shared.ChannelCount.Equals(96)) { tbxWellPositionTips.IsEnabled = false; wellPlate.IsEnabled = false; } List list = new List(); List lattices = DataModule.getInstance().GetLattices(); TabletopTemplate tabletopTemplate = TabletopTemplateDB.GetCurrentAppTabletopTemplateCollectionFromdb(); //增加台面模板判断 if (tabletopTemplate == null) { for (int i = 0; i < Shared.SoftwareInformation.columns; i++) { for (int j = 0; j < Shared.SoftwareInformation.rows; j++) { int tmp = i * Shared.SoftwareInformation.rows + j; Lattice latt = lattices[tmp]; if (latt.is_trash == 1) continue; list.Add(latt.lattice_num); } } } else { foreach (Lattice lattice in lattices) { if (lattice.is_trash == 1) continue; list.Add(lattice.lattice_num); } } //list.Insert(0, Properties.Resources.strPleaseSelect); comboboxTablePos.ItemsSource = list; comboboxTablePos.SelectedIndex = 0; gdLiquidFollow.RowDefinitions[1].Height = new GridLength(0); gdLiquidFollow.RowDefinitions[2].Height = new GridLength(0); gdLiquidFollow.RowDefinitions[3].Height = new GridLength(0); gdLiquidFollow.RowDefinitions[4].Height = new GridLength(0); List mixPositionList = new List(); mixPositionList.Add(MixPositionEnum.Liquid.ToString()); mixPositionList.Add(MixPositionEnum.Top.ToString()); mixPositionList.Add(MixPositionEnum.Bottom.ToString()); cbMixAspiratePosition.ItemsSource = mixPositionList; cbMixDispensePosition.ItemsSource = mixPositionList; //DeviceArm arm = cbArm.SelectedItem as DeviceArm; //tbxHeadType.Text = arm.head_type.ToString(); ObservableCollection listProcess = DataModule.getInstance().GetUndetectProcessList(); cbxLiquidSensorDisId.ItemsSource = listProcess; ObservableCollection listDispenseBlockProcess = DataModule.getInstance().GetDispenseBlockDealTypeList(); cbxDispenseBlockDealType.ItemsSource = listDispenseBlockProcess; ObservableCollection listLiquidFollowType = DataModule.getInstance().GetLiquidFollowTypeList(); cbxLiquidFollowType.ItemsSource = listLiquidFollowType; methodDispense = new MethodDispense(); methodDispense.name = method.method_name; methodDispense.label = method.method_name; tbxCommandName.Text = method.method_name; methodDispense.status = (method.isEnabled == true ? "enable" : "disable"); methodDispense.wellarray = ""; methodDispense.strIndex = method.strIndex; this.method = method; if (method.tag != null) { methodDispense = (MethodDispense)method.tag; currmethodDispense = methodDispense; isrun = methodDispense.isrun; status = methodDispense.status; name = methodDispense.name; label = methodDispense.label; labwareText = methodDispense.labwareText; labwareValue = methodDispense.labwareValue; positionText = methodDispense.positionText; positionValue = methodDispense.positionValue; armText = methodDispense.armText; armValue = methodDispense.armValue; channels = methodDispense.channels; wellarray = methodDispense.wellarray; wellVolume = methodDispense.wellvolume; enableSingleWellvolume = methodDispense.enableSingleWellvolume; singlewellvolume = methodDispense.singlewellvolume; isNull = methodDispense.isNull; liquididText = methodDispense.liquididText; liquididValue = methodDispense.liquididValue; liquidrangeidText = methodDispense.liquidrangeidText; liquidrangeidValue = methodDispense.liquidrangeidValue; liquidpidText = methodDispense.liquidpidText; liquidpidValue = methodDispense.liquidpidValue; bMix = methodDispense.bMix; bMultiMix=methodDispense.bMultiMix; mixvolume = methodDispense.mixvolume; mixcount = methodDispense.mixcount; mixAspiratePositionText = methodDispense.mixAspiratePositionText; mixAspiratePositionValue = methodDispense.mixAspiratePositionValue; mixAspirateDistance = methodDispense.mixAspirateDistance; mixAspirateSpeed = methodDispense.mixAspirateSpeed; mixDispensePositionText = methodDispense.mixDispensePositionText; mixDispensePositionValue = methodDispense.mixDispensePositionValue; mixDispenseDistance = methodDispense.mixDispenseDistance; mixDispenseSpeed = methodDispense.mixDispenseSpeed; enableLiquidSensor = methodDispense.enableLiquidSensor; liquidSensorCount = methodDispense.liquidSensorCount; liquidSensorDistance = methodDispense.liquidSensorDistance; liquidSensorEndDistance = methodDispense.liquidSensorEndDistance; liquidSensorSpeed = methodDispense.liquidSensorSpeed; liquidSensorRadio = methodDispense.liquidSensorRadio; liquidSensorDisIdText = methodDispense.liquidSensorDisIdText; liquidSensorDisIdValue = methodDispense.liquidSensorDisIdValue; enableLiquidFollow = methodDispense.enableLiquidFollow; liquidFollowType = methodDispense.liquidFollowType; liquidFollowTypeName = methodDispense.liquidFollowTypeName; liquidFollowSpeed = methodDispense.liquidFollowSpeed; liquidFollowDistance = methodDispense.liquidFollowDistance; liquidFollowArea = methodDispense.liquidFollowArea; enableMixFollow = methodDispense.enableMixFollow; enableSensorBlock = methodDispense.enableSensorBlock; //liquidSensorBlockDistance = methodDispense.liquidSensorBlockDistance; dispenseBlockDisIdText = methodDispense.dispenseBlockDisIdText; dispenseBlockDisIdValue = methodDispense.dispenseBlockDisIdValue; } this.DataContext = methodDispense; LiquidManagement.loadLiquidsEvent += BindLiquids; //if (Shared.ChannelCount > 1) //{ // tipsChannel.CanEdit = true; //} } private void welPlate_SelectedEvent(object sender, CustomRoutedEventArgs e) { if (methodDispense != null) { string str = (string)e.param; methodDispense.wellarray = str; } } private void btnSingleVolumnSetting_Click(object sender, RoutedEventArgs e) { if (EventResponseController.Instance.CanExecute() == false) return; Window wnd = System.Windows.Application.Current.MainWindow; Grid grid = Utilities.FindVisualChild(wnd); VolumnSettingPerWell vspw = new VolumnSettingPerWell(); vspw.closeEvent += Vspw_closeEvent; vspw.currentChannels = tipsChannel.SelectedChannels; vspw.dispenseProperty = this; grid.Children.Add(vspw); } private void Vspw_closeEvent(object sender, EventArgs e) { Window wnd = System.Windows.Application.Current.MainWindow; Grid grid = Utilities.FindVisualChild(wnd); UIElement element = sender as UIElement; grid.Children.Remove(element); } public void SetTableName(string tableName, Labware lb) { if (lb == null) return; if (string.IsNullOrEmpty(lb.labware_id)) return; if (string.IsNullOrEmpty(methodDispense.armValue)) { System.Windows.MessageBox.Show(Properties.Resources.msgPlsSelectArm, "Tips"); return; } selectedLabware = lb; wellPlate.Rows = lb.number_row; wellPlate.Columns = lb.number_column; wellPlate.labwareWellInfoList = lb.labwareWellInfoList; wellPlate.LabwareRealWidth = lb.labware_length; wellPlate.LabwareRealLength = lb.labware_width; wellPlate.DataContext = lb; List latticeList = DataRWDAL.LatticeDB.GetLatticeDataFromdb(Shared.SoftwareInformation.software_device_number, Convert.ToInt32(methodDispense.armValue)); Lattice lattice = latticeList.Find(s => s.lattice_num == tableName); if (lattice == null) { LoggerHelper.InfoLog("Error: Can't find lattice with lattice_num=" + tableName); return; } comboboxTablePos.SelectedItem = tableName; if (Shared.ChannelCount.Equals(96)) { if (!lb.labware_type_id.Equals("3")) { if (!lb.number_row.Equals(8) || !lb.number_column.Equals(12)) { ShowTip.ShowNotice("请选择96孔板的台面", InfoType.Warning); tbxWellPositionTips.Text = ""; wellPlate.Selection = ""; return; } } else { if (!lb.number_row.Equals(1) || !lb.number_column.Equals(1)) { ShowTip.ShowNotice("请选择单试剂槽的台面", InfoType.Warning); tbxWellPositionTips.Text = ""; wellPlate.Selection = ""; return; } } } if (lb.labware_tubeshelf_type.Equals(1))//异形管架耗材 { tbxWellPositionTips.Text = ""; wellPlate.Selection = ""; } if (methodDispense != null) { methodDispense.positionText = tableName; methodDispense.positionValue = lattice.lattice_id; methodDispense.labwareText = lb.labware_name; methodDispense.labwareValue = lb.labware_id; if (Shared.ChannelCount.Equals(96)) { if (!lb.labware_type_id.Equals("3")) { wellarray = "A1,B1,C1,D1,E1,F1,G1,H1,A2,B2,C2,D2,E2,F2,G2,H2,A3,B3,C3,D3,E3,F3,G3,H3,A4,B4,C4,D4,E4,F4,G4,H4,A5,B5,C5,D5,E5,F5,G5,H5,A6,B6,C6,D6,E6,F6,G6,H6,A7,B7,C7,D7,E7,F7,G7,H7,A8,B8,C8,D8,E8,F8,G8,H8,A9,B9,C9,D9,E9,F9,G9,H9,A10,B10,C10,D10,E10,F10,G10,H10,A11,B11,C11,D11,E11,F11,G11,H11,A12,B12,C12,D12,E12,F12,G12,H12"; } else { wellarray = "A1"; } tbxWellPositionTips.Text = wellarray; wellPlate.Selection = wellarray; } } } public void UserControl_Loaded(object sender, RoutedEventArgs e) { mark += 1; try { if (mark > 1) { return; } if (currmethodDispense != null) { if (!string.IsNullOrEmpty(armText)) { tbxCommandName.Text = name; cbArm.SelectedValue = armValue; DeviceArm arm = cbArm.SelectedItem as DeviceArm; tbxHeadType.Text = arm.head_type.ToString(); //根据板位上的耗材类型,显示耗材孔位示意图 Labware labwareA = DataRWDAL.LabwareDB.GetLabware(methodDispense.labwareValue); wellPlate.Rows = labwareA.number_row; wellPlate.Columns = labwareA.number_column; if (labwareA.labware_type_id.Equals("4")) { labwareA.labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labwareA.labware_id); wellPlate.labwareWellInfoList = labwareA.labwareWellInfoList; wellPlate.LabwareRealWidth = labwareA.labware_length; wellPlate.LabwareRealLength = labwareA.labware_width; } if (Shared.ChannelCount.Equals(96)) { } else { tipsChannel.SelectedChannels = channels.ToList(); tipsChannel.SetSelectedChannels(); tipsChannel_SelectedChangedEvent(null, null); } comboboxTablePos.SelectedItem = positionText; tbxWellPositionTips.Text = wellarray; wellPlate.Selection = wellarray; //wellPlate.SetSelection(wellarray); //tbxWellvolume.Text = wellvolume.ToString(); tbVolume.Text = wellVolume.ToString(); if (isNull) { cbxRunout.IsChecked = true; } else { cbxRunout.IsChecked = false; } if (enableSingleWellvolume) { cbSingleVolumn.IsChecked = true; } else { cbSingleVolumn.IsChecked = false; } cbLiquidType.SelectedValue = liquididValue; cbLiquidRange.SelectedValue = liquidrangeidValue; cbLiquid.SelectedValue = liquidpidValue; if (bMix) { checkboxMix.IsChecked = true; tbxMixVolume.Text = mixvolume.ToString(); tbxMixCount.Text = mixcount.ToString(); cbMixAspiratePosition.SelectedIndex = mixAspiratePositionValue; tbxMixAspirateDistance.Text = mixAspirateDistance.ToString(); tbxMixAspirateSpeed.Text = mixAspirateSpeed.ToString(); cbMixDispensePosition.SelectedIndex = mixDispensePositionValue; tbxMixDispenseDistance.Text = mixDispenseDistance.ToString(); tbxMixDispenseSpeed.Text = mixDispenseSpeed.ToString(); } else { checkboxMix.IsChecked = false; } if (enableLiquidSensor) { checkboxLiquidDetect.IsChecked = true; txtNameLiquidSensorCount.Text = liquidSensorCount.ToString(); txtLiquidSensorDistance.Text = liquidSensorDistance.ToString(); txtLiquidSensorEndDistance.Text = liquidSensorEndDistance.ToString(); txtLiquidSensorSpeed.Text = liquidSensorSpeed.ToString(); txtLiquidSensorRadio.Text = liquidSensorRadio.ToString(); cbxLiquidSensorDisId.SelectedIndex = Convert.ToInt32(liquidSensorDisIdValue); gdLiquidSensor.IsEnabled = true; if (enableLiquidFollow) { checkboxLiquidFollow.IsChecked = true; cbxLiquidFollowType.SelectedIndex = liquidFollowType; txtLiquidFollowSpeed.Text = liquidFollowSpeed.ToString(); txtLiquidFollowDistance.Text = liquidFollowDistance.ToString(); if (liquidFollowType == 1) { bdrFollowOneType.Visibility = Visibility.Visible; tbkFollowTwoTypeLabel.Visibility = Visibility.Collapsed; txtLiquidFollowArea.Visibility = Visibility.Collapsed; tbkFollowTwoTypeUnit.Visibility = Visibility.Collapsed; if (methodDispense != null) { methodDispense.liquidFollowType = cbxLiquidFollowType.SelectedIndex; methodDispense.liquidFollowTypeName = cbxLiquidFollowType.Text; } } else if (liquidFollowType == 2) { bdrFollowOneType.Visibility = Visibility.Collapsed; tbkFollowTwoTypeLabel.Visibility = Visibility.Visible; txtLiquidFollowArea.Visibility = Visibility.Visible; tbkFollowTwoTypeUnit.Visibility = Visibility.Visible; if (methodDispense != null) { methodDispense.liquidFollowType = cbxLiquidFollowType.SelectedIndex; methodDispense.liquidFollowTypeName = cbxLiquidFollowType.Text; } txtLiquidFollowArea.Text = liquidFollowArea.ToString(); } if (enableMixFollow) { rdMixFollow.IsChecked = true; } else { rdMixNotFollow.IsChecked = true; } } else { checkboxLiquidFollow.IsChecked = false; cbxLiquidFollowType.SelectedIndex = liquidFollowType; txtLiquidFollowSpeed.Text = liquidFollowSpeed.ToString(); txtLiquidFollowDistance.Text = liquidFollowDistance.ToString(); txtLiquidFollowArea.Text = liquidFollowArea.ToString(); //gdLiquidFollow.IsEnabled = false; if (enableMixFollow) { rdMixFollow.IsChecked = true; } else { rdMixNotFollow.IsChecked = true; } } } else { checkboxLiquidDetect.IsChecked = false; gdLiquidSensor.IsEnabled = false; checkboxLiquidFollow.IsEnabled = false; cbxLiquidSensorDisId.SelectedIndex = 0; cbxLiquidSensorBlockDisId.SelectedIndex = 0; cbxDispenseBlockDealType.SelectedIndex = 0; //gdLiquidFollow.IsEnabled = false; cbxLiquidFollowType.SelectedIndex = liquidFollowType; txtLiquidFollowSpeed.Text = liquidFollowSpeed.ToString(); txtLiquidFollowDistance.Text = liquidFollowDistance.ToString(); txtLiquidFollowArea.Text = liquidFollowArea.ToString(); if (enableMixFollow) { rdMixFollow.IsChecked = true; } else { rdMixNotFollow.IsChecked = true; } } if (enableSensorBlock) { checkboxBlockDetect.IsChecked = true; cbxDispenseBlockDealType.SelectedIndex = Convert.ToInt32(dispenseBlockDisIdValue); gdBlockSensor.IsEnabled = true; } else { checkboxBlockDetect.IsChecked = false; gdBlockSensor.IsEnabled = false; } if (currmethodDispense != null) { methodDispense = currmethodDispense; } } } else { cbArm.SelectedIndex = curArmSelectedIndex; if (cbArm.Items.Count > 1) { cbArm.SelectedIndex = 1; } DeviceArm arm = cbArm.SelectedItem as DeviceArm; cbLiquidType.SelectedIndex = curLiquidTypeSelectedIndex; //cbLiquidRange.SelectedIndex = curLiquidRangeSelectedIndex; cbMixAspiratePosition.SelectedIndex = curMixAspirateSelectIndex; cbMixDispensePosition.SelectedIndex = curMixDispenseSelectIndex; tbxHeadType.Text = arm.head_type.ToString(); //methodDispense = currmethodDispense; if (currmethodDispense != null) { methodDispense = currmethodDispense; } cbxLiquidSensorDisId.SelectedIndex = 0; cbxLiquidSensorBlockDisId.SelectedIndex = 0; cbxDispenseBlockDealType.SelectedIndex = 0; } ReceiveAndUpdate(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } //cbArm.SelectedIndex = curArmSelectedIndex; //cbLiquidType.SelectedIndex = curLiquidTypeSelectedIndex; ////cbLiquidRange.SelectedIndex = curLiquidRangeSelectedIndex; //cbMixAspiratePosition.SelectedIndex = curMixAspirateSelectIndex; //cbMixDispensePosition.SelectedIndex = curMixDispenseSelectIndex; } private void cbLiquidType_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbLiquidType.SelectedIndex < 0) return; if (cbLiquidType.SelectedIndex == 0) { cbLiquidRange.SelectedIndex = 0; cbLiquid.SelectedIndex = 0; } curLiquidTypeSelectedIndex = cbLiquidType.SelectedIndex; if (cbLiquidType.SelectedIndex != 0) { if (methodDispense != null) { methodDispense.liquididText = ((LiquidType)cbLiquidType.SelectedItem).liquid_type_name.ToString(); methodDispense.liquididValue = ((LiquidType)cbLiquidType.SelectedItem).liquid_type_id.ToString(); } } } private void cbLiquidRange_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbLiquidRange.SelectedIndex < 0) return; curLiquidRangeSelectedIndex = cbLiquidRange.SelectedIndex; string typeID = cbLiquidType.SelectedValue as string; string rangeID = cbLiquidRange.SelectedValue as string; string armID = cbArm.SelectedValue.ToString(); ObservableCollection liquidList = LiquidTypeRSRangeDB.GetLiquidFromdbByTypeAndRange(typeID, rangeID, armID); Liquid liquid = new Liquid(); liquid.liquid_name = Properties.Resources.strPleaseSelect; liquidList.Insert(0, liquid); if (cbLiquidRange.SelectedIndex != 0) { if (methodDispense != null) { methodDispense.liquidrangeidText = ((LiquidRange)cbLiquidRange.SelectedItem).liquid_range_name.ToString(); methodDispense.liquidrangeidValue = ((LiquidRange)cbLiquidRange.SelectedItem).liquid_range_id.ToString(); } } cbLiquid.ItemsSource = liquidList; cbLiquid.SelectedIndex = 0; } private void cbArm_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { DeviceArm arm = cbArm.SelectedItem as DeviceArm; methodDispense.armText = arm.device_arm_name; methodDispense.armValue = arm.device_arm_id.ToString(); methodDispense.headType = arm.head_type; if (arm.arm_type.Equals(0)) { gdContent.RowDefinitions[3].Height = new GridLength(0); gdContent.RowDefinitions[4].Height = new GridLength(0); return; } else { gdContent.RowDefinitions[3].Height = new GridLength(40); gdContent.RowDefinitions[4].Height = new GridLength(80); } if (Shared.ChannelCount.Equals(96)) { curArmSelectedIndex = cbArm.SelectedIndex; methodDispense.channels = new int[] {1,2,3,4,5,6,7,8, 9,10,11,12,13,14,15,16, 17,18,19,20,21,22,23,24, 25,26,27,28,29,30,31,32, 33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48, 49,50,51,52,53,54,55,56, 57,58,59,60,61,62,63,64, 65,66,67,68,69,70,71,72, 73,74,75,76,77,78,79,80, 81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96}; } else { // 臂未选择 if (cbArm.SelectedIndex < 0 || cbArm.SelectedIndex == 0) { tipsChannel.SetTotalChannelCount(0); tipsChannel.SelectedChannels = new List(); tipsChannel.SetSelectedChannels(); tipsChannel_SelectedChangedEvent(null, null); return; } curArmSelectedIndex = cbArm.SelectedIndex; string armName = ((DeviceArm)cbArm.SelectedItem).device_arm_name.ToString(); methodDispense.channels = Shared.ChannelsId; tipsChannel.SelectedChannels = Shared.ChannelsId.ToList(); tipsChannel.SetTotalChannelCount(Shared.ChannelCount); tipsChannel.SetSelectedChannels(); tipsChannel_SelectedChangedEvent(null, null); } ReceiveAndUpdate(); } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbLiquid_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbLiquid.SelectedIndex < 1) return; curLiquidSelectedIndex = cbLiquid.SelectedIndex; Liquid liquid = cbLiquid.SelectedItem as Liquid; if (cbLiquid.SelectedIndex != 0) { if (methodDispense != null) { methodDispense.liquidpidText = liquid.liquid_name; methodDispense.liquidpidValue = liquid.liquid_id; } } } private void cbMixAspiratePosition_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbMixAspiratePosition.SelectedIndex < 0) return; curMixAspirateSelectIndex = cbMixAspiratePosition.SelectedIndex; MixPositionEnum position = (MixPositionEnum)Enum.Parse(typeof(MixPositionEnum), (string)cbMixAspiratePosition.SelectedItem); if (methodDispense != null) { methodDispense.mixAspiratePositionValue = (int)position; if ((int)position == 0) { methodDispense.mixAspiratePositionText = "Liquid"; } else if ((int)position == 1) { methodDispense.mixAspiratePositionText = "Top"; } else { methodDispense.mixAspiratePositionText = "Bottom"; } } } private void cbMixDispensePosition_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cbMixDispensePosition.SelectedIndex < 0) return; curMixDispenseSelectIndex = cbMixDispensePosition.SelectedIndex; MixPositionEnum position = (MixPositionEnum)Enum.Parse(typeof(MixPositionEnum), (string)cbMixDispensePosition.SelectedItem); if (methodDispense != null) { methodDispense.mixDispensePositionValue = (int)position; if ((int)position == 0) { methodDispense.mixDispensePositionText = "Liquid"; } else if ((int)position == 1) { methodDispense.mixDispensePositionText = "Top"; } else { methodDispense.mixDispensePositionText = "Bottom"; } } } private void tbxCommandLabel_TextChanged(object sender, TextChangedEventArgs e) { try { if (string.IsNullOrEmpty(tbxCommandName.Text)) { clError.Text = "命令标签不能为空"; return; } if (methodDispense != null) { methodDispense.label = tbxCommandLabel.Text; methodDispense.name = tbxCommandName.Text.ToString(); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxWellPositionTips_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.wellarray = tbxWellPositionTips.Text; if (Shared.ChannelCount.Equals(96)) { methodDispense.channels = new int[] {1,2,3,4,5,6,7,8, 9,10,11,12,13,14,15,16, 17,18,19,20,21,22,23,24, 25,26,27,28,29,30,31,32, 33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48, 49,50,51,52,53,54,55,56, 57,58,59,60,61,62,63,64, 65,66,67,68,69,70,71,72, 73,74,75,76,77,78,79,80, 81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96}; } else { methodDispense.channels = tipsChannel.SelectedChannels.ToArray(); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbxRunout_Click(object sender, RoutedEventArgs e) { try { if (cbxRunout.IsChecked == true) { if (methodDispense != null) { methodDispense.isNull = true; } } else { if (methodDispense != null) { methodDispense.isNull = false; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbSingleVolumn_Click(object sender, RoutedEventArgs e) { try { if (cbSingleVolumn.IsChecked == true) { btnSingleVolumnSetting.Foreground = new SolidColorBrush(Colors.Blue); if (methodDispense != null) { methodDispense.enableSingleWellvolume = true; } } else { btnSingleVolumnSetting.Foreground = new SolidColorBrush(Colors.Black); if (methodDispense != null) { methodDispense.enableSingleWellvolume = false; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void checkboxMix_Click(object sender, RoutedEventArgs e) { try { if ((bool)checkboxMix.IsChecked) { if (methodDispense != null) { methodDispense.bMix = true; methodDispense.mixcount = Convert.ToInt32(tbxMixCount.Text); methodDispense.mixvolume = Convert.ToDouble(tbxMixVolume.Text); methodDispense.mixAspiratePositionText = cbMixAspiratePosition.Text; methodDispense.mixAspiratePositionValue = Convert.ToInt32(cbMixAspiratePosition.SelectedValue); methodDispense.mixAspirateDistance = Convert.ToDouble(tbxMixAspirateDistance.Text); methodDispense.mixAspirateSpeed = Convert.ToDouble(tbxMixAspirateSpeed.Text); methodDispense.mixDispensePositionText = cbMixDispensePosition.Text; methodDispense.mixDispensePositionValue = Convert.ToInt32(cbMixDispensePosition.SelectedValue); methodDispense.mixDispenseDistance = Convert.ToDouble(tbxMixDispenseDistance.Text); methodDispense.mixDispenseSpeed = Convert.ToDouble(tbxMixDispenseSpeed.Text); } } else { if (methodDispense != null) { methodDispense.bMix = false; methodDispense.mixcount = Convert.ToInt32(tbxMixCount.Text); methodDispense.mixvolume = Convert.ToDouble(tbxMixVolume.Text); methodDispense.mixAspiratePositionText = cbMixAspiratePosition.Text; methodDispense.mixAspiratePositionValue = Convert.ToInt32(cbMixAspiratePosition.SelectedValue); methodDispense.mixAspirateDistance = Convert.ToDouble(tbxMixAspirateDistance.Text); methodDispense.mixAspirateSpeed = Convert.ToDouble(tbxMixAspirateSpeed.Text); methodDispense.mixDispensePositionText = cbMixDispensePosition.Text; methodDispense.mixDispensePositionValue = Convert.ToInt32(cbMixDispensePosition.SelectedValue); methodDispense.mixDispenseDistance = Convert.ToDouble(tbxMixDispenseDistance.Text); methodDispense.mixDispenseSpeed = Convert.ToDouble(tbxMixDispenseSpeed.Text); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxMixVolume_TextChanged(object sender, TextChangedEventArgs e) { try { if (Shared.SoftwareInformation.software_device_number != DeviceCategory.DeviceHXFX) { if (!Consumables.ConsumablesValidationRule.IsRange(tbxMixVolume.Text, 1.0, 1000.0, false, out string message)) { tbxMixVolume.BorderBrush = Brushes.Red; tbxMixVolume.BorderThickness = new Thickness(1); } else { tbxMixVolume.BorderBrush = Brushes.Black; } } else { if (!Consumables.ConsumablesValidationRule.IsRange(tbxMixVolume.Text, 1.0, 50000.0, false, out string message)) { tbxMixVolume.BorderBrush = Brushes.Red; tbxMixVolume.BorderThickness = new Thickness(1); } else { tbxMixVolume.BorderBrush = Brushes.Black; } } if (methodDispense != null) { methodDispense.mixvolume = Convert.ToDouble(tbxMixVolume.Text); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxMixCount_TextChanged(object sender, TextChangedEventArgs e) { try { if (!string.IsNullOrEmpty(tbxMixCount.Text)) { if (methodDispense != null) { methodDispense.mixcount = Convert.ToInt32(tbxMixCount.Text); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxMixAspirateSpeed_TextChanged(object sender, TextChangedEventArgs e) { try { if (!Regex.IsMatch(tbxMixAspirateSpeed.Text, "^\\+?(:?(:?\\d+\\.\\d+)|(:?\\d+))|(-?\\d+)(\\.\\d+)?$")) { tbxMixAspirateSpeed.BorderBrush = Brushes.Red; } if (!string.IsNullOrEmpty(tbxMixAspirateSpeed.Text)) { if (methodDispense != null) { methodDispense.mixAspirateSpeed = Convert.ToDouble(tbxMixAspirateSpeed.Text); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxMixAspirateDistance_TextChanged(object sender, TextChangedEventArgs e) { try { if (!Regex.IsMatch(tbxMixAspirateDistance.Text, "^\\+?(:?(:?\\d+\\.\\d+)|(:?\\d+))|(-?\\d+)(\\.\\d+)?$")) { tbxMixAspirateDistance.BorderBrush = Brushes.Red; } if (!string.IsNullOrEmpty(tbxMixAspirateDistance.Text)) { if (methodDispense != null) { methodDispense.mixAspirateDistance = Convert.ToDouble(tbxMixAspirateDistance.Text); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxMixDispenseDistance_TextChanged(object sender, TextChangedEventArgs e) { try { if (!Regex.IsMatch(tbxMixDispenseDistance.Text, "^\\+?(:?(:?\\d+\\.\\d+)|(:?\\d+))|(-?\\d+)(\\.\\d+)?$")) { tbxMixDispenseDistance.BorderBrush = Brushes.Red; } if (!string.IsNullOrEmpty(tbxMixDispenseDistance.Text)) { if (methodDispense != null) { methodDispense.mixDispenseDistance = Convert.ToDouble(tbxMixDispenseDistance.Text); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxMixDispenseSpeed_TextChanged(object sender, TextChangedEventArgs e) { try { if (!Regex.IsMatch(tbxMixDispenseSpeed.Text, "^\\+?(:?(:?\\d+\\.\\d+)|(:?\\d+))|(-?\\d+)(\\.\\d+)?$")) { tbxMixDispenseSpeed.BorderBrush = Brushes.Red; } if (!string.IsNullOrEmpty(tbxMixDispenseSpeed.Text)) { if (methodDispense != null) { methodDispense.mixDispenseSpeed = Convert.ToDouble(tbxMixDispenseSpeed.Text); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void checkboxLiquidDetect_Click(object sender, RoutedEventArgs e) { try { if ((bool)checkboxLiquidDetect.IsChecked) { checkboxLiquidFollow.IsEnabled = true; if (methodDispense != null) { methodDispense.enableLiquidSensor = true; methodDispense.liquidSensorCount = Convert.ToInt32(txtNameLiquidSensorCount.Text); methodDispense.liquidSensorDistance = Convert.ToDouble(txtLiquidSensorDistance.Text); methodDispense.liquidSensorEndDistance = Convert.ToDouble(txtLiquidSensorEndDistance.Text); methodDispense.liquidSensorSpeed = Convert.ToDouble(txtLiquidSensorSpeed.Text); methodDispense.liquidSensorRadio = Convert.ToDouble(txtLiquidSensorRadio.Text); methodDispense.liquidSensorDisIdText = cbxLiquidSensorDisId.Text; methodDispense.liquidSensorDisIdValue = Convert.ToDouble(cbxLiquidSensorDisId.SelectedIndex); gdLiquidSensor.IsEnabled = true; } } else { if (methodDispense != null) { methodDispense.enableLiquidSensor = false; methodDispense.liquidSensorCount = Convert.ToInt32(txtNameLiquidSensorCount.Text); methodDispense.liquidSensorDistance = Convert.ToDouble(txtLiquidSensorDistance.Text); methodDispense.liquidSensorEndDistance = Convert.ToDouble(txtLiquidSensorEndDistance.Text); methodDispense.liquidSensorSpeed = Convert.ToDouble(txtLiquidSensorSpeed.Text); methodDispense.liquidSensorRadio = Convert.ToDouble(txtLiquidSensorRadio.Text); methodDispense.liquidSensorDisIdText = cbxLiquidSensorDisId.Text; methodDispense.liquidSensorDisIdValue = Convert.ToDouble(cbxLiquidSensorDisId.SelectedIndex); gdLiquidSensor.IsEnabled = false; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void txtNameLiquidSensorCount_TextChanged(object sender, TextChangedEventArgs e) { try { if (!Consumables.ConsumablesValidationRule.IsPositiveIntegerr(txtNameLiquidSensorCount.Text, out string message)) { lscError.Text = message; return; } else { lscError.Text = ""; } if (methodDispense != null) { methodDispense.liquidSensorCount = Convert.ToInt32(txtNameLiquidSensorCount.Text); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void txtLiquidSensorDistance_TextChanged(object sender, TextChangedEventArgs e) { try { if (!Consumables.ConsumablesValidationRule.IsRange(txtLiquidSensorDistance.Text, 0.0, 100, false, out string message)) { lsdError.Text = message; return; } else { lsdError.Text = ""; } if (methodDispense != null) { methodDispense.liquidSensorDistance = Convert.ToDouble(txtLiquidSensorDistance.Text); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbxLiquidSensorDisId_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.liquidSensorDisIdText = ((string)cbxLiquidSensorDisId.SelectedItem).ToString(); methodDispense.liquidSensorDisIdValue = Convert.ToDouble(cbxLiquidSensorDisId.SelectedIndex); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void checkboxBlockDetect_Click(object sender, RoutedEventArgs e) { try { if ((bool)checkboxBlockDetect.IsChecked) { if (methodDispense != null) { methodDispense.enableSensorBlock = true; methodDispense.dispenseBlockDisIdText = cbxDispenseBlockDealType.Text; methodDispense.dispenseBlockDisIdValue = Convert.ToInt32(cbxDispenseBlockDealType.SelectedValue); gdBlockSensor.IsEnabled = true; } } else { if (methodDispense != null) { methodDispense.enableSensorBlock = false; methodDispense.dispenseBlockDisIdText = cbxDispenseBlockDealType.Text; methodDispense.dispenseBlockDisIdValue = Convert.ToInt32(cbxDispenseBlockDealType.SelectedValue); gdBlockSensor.IsEnabled = false; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbxLiquidSensorBlockDistance_TextChanged(object sender, TextChangedEventArgs e) { try { if (!Consumables.ConsumablesValidationRule.IsRange(tbxLiquidSensorBlockDistance.Text, 0.0, 100, false, out string message)) { lsbdError.Text = message; return; } else { lsbdError.Text = ""; } if (methodDispense != null) { //methodDispense.liquidSensorBlockDistance = Convert.ToDouble(tbxLiquidSensorBlockDistance.Text); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbxLiquidSensorBlockDisId_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (methodDispense != null) { //methodDispense.liquidSensorBlockDisIdText = cbxLiquidSensorBlockDisId.Text; //methodDispense.liquidSensorBlockDisIdValue = Convert.ToDouble(cbxLiquidSensorBlockDisId.SelectedValue); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void comboboxTablePos_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (comboboxTablePos.SelectedItem == null) return; string name = comboboxTablePos.SelectedItem as string; if (selectedLabware == null) { if (methodDispense != null) { methodDispense.positionText = name; List latticeList = DataRWDAL.LatticeDB.GetLatticeDataFromdb(Shared.SoftwareInformation.software_device_number, Convert.ToInt32(methodDispense.armValue)); Lattice lattice = latticeList.Find(s => s.lattice_num == name); methodDispense.positionValue = lattice.lattice_id; } } SetTableName(name, selectedLabware); #region 验证台面耗材类型 if (TestDesign.SelectLabwares.Count() <= 0 || TestDesign.SelectLabwares.FirstOrDefault(m => m.Label.Equals(comboboxTablePos.SelectedValue.ToString())) == null) return; ControlLabware labware = TestDesign.SelectLabwares.FirstOrDefault(m => m.Label.Equals(comboboxTablePos.SelectedValue.ToString())); if ("1,3,5,4".Contains(labware.LabwareType.ToString())) { cmbTablePos.Text = ""; } else { cmbTablePos.Text = $"不能在耗材 [{labware.LabwareName}] 执行加液"; } #endregion if (this.method != null) { this.method.method_Tipcontent = string.Format("{0};{1}", methodDispense.positionText, methodDispense.wellvolume); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void tbVolume_TextChanged(object sender, TextChangedEventArgs e) { try { if (Shared.SoftwareInformation.software_device_number != DeviceCategory.DeviceHXFX) { if (!Consumables.ConsumablesValidationRule.IsRange(tbVolume.Text, 1.0, 1000.0, false, out string message)) { tbVolume.BorderBrush = Brushes.Red; tbVolume.BorderThickness = new Thickness(1); } else { tbVolume.BorderBrush = Brushes.Black; } } else { if (!Consumables.ConsumablesValidationRule.IsRange(tbVolume.Text, 1.0, 100000.0, false, out string message)) { tbVolume.BorderBrush = Brushes.Red; tbVolume.BorderThickness = new Thickness(1); } else { tbVolume.BorderBrush = Brushes.Black; } } if (methodDispense != null) { methodDispense.wellvolume = Convert.ToDouble(this.tbVolume.Text); if (this.method != null) { this.method.method_Tipcontent = string.Format("{0};{1}", methodDispense.positionText, methodDispense.wellvolume); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } /// /// 刷新液体下拉 /// /// 需要删除的液体ID /// 是否删除 private void BindLiquids(string liquid_id, bool IsDelete) { if (IsDelete) { //记录所选值 string id = cbLiquid.SelectedValue.ToString(); int index = cbLiquid.SelectedIndex; //刷新下拉数据 cbLiquidRange_SelectionChanged(null, null); //删除的液体是所需液体 if (id.Equals(liquid_id)) //重置为请选择 cbLiquid.SelectedIndex = 0; else //保持之前选择 cbLiquid.SelectedIndex = index; } else { //记录所选值 int index = cbLiquid.SelectedIndex; //刷新下拉数据 cbLiquidRange_SelectionChanged(null, null); //保持之前选择 cbLiquid.SelectedIndex = index; } } #region 可用通道鼠标选择变更事件 /// /// 可用通道鼠标选择变更事件 /// /// /// private void tipsChannel_SelectedChangedEvent(object sender, EventArgs e) { methodDispense.channels = tipsChannel.SelectedChannels.ToArray(); } #endregion private void checkboxLiquidFollow_Click(object sender, RoutedEventArgs e) { try { if (checkboxLiquidDetect.IsChecked == false) { checkboxLiquidFollow.IsChecked = false; return; } if (checkboxLiquidFollow.IsChecked == true) { if (Shared.SoftwareInformation.software_device_number == DeviceCategory.DeviceX3) { cbxLiquidFollowType.SelectedIndex = 2; } else { cbxLiquidFollowType.SelectedIndex = 1; } if (methodDispense != null) { methodDispense.enableLiquidFollow = true; methodDispense.liquidFollowType = Convert.ToInt32(cbxLiquidFollowType.SelectedIndex); methodDispense.liquidFollowTypeName = cbxLiquidFollowType.Text; methodDispense.liquidFollowSpeed = Convert.ToDouble(txtLiquidFollowSpeed.Text); methodDispense.liquidFollowDistance = Convert.ToDouble(txtLiquidFollowDistance.Text); methodDispense.liquidFollowArea = Convert.ToDouble(txtLiquidFollowArea.Text); methodDispense.enableMixFollow = rdMixFollow.IsChecked == true ? true : false; methodDispense.liquidSensorDisIdText = cbxLiquidSensorDisId.Text; methodDispense.liquidSensorDisIdValue = Convert.ToDouble(cbxLiquidSensorDisId.SelectedIndex); //gdLiquidFollow.IsEnabled = true; } } else { if (Shared.SoftwareInformation.software_device_number == DeviceCategory.DeviceX3) { cbxLiquidFollowType.SelectedIndex = 2; } else { cbxLiquidFollowType.SelectedIndex = 1; } if (methodDispense != null) { methodDispense.enableLiquidFollow = false; methodDispense.liquidFollowType = Convert.ToInt32(cbxLiquidFollowType.SelectedIndex); methodDispense.liquidFollowTypeName = cbxLiquidFollowType.Text; methodDispense.liquidFollowSpeed = Convert.ToDouble(txtLiquidFollowSpeed.Text); methodDispense.liquidFollowDistance = Convert.ToDouble(txtLiquidFollowDistance.Text); methodDispense.liquidFollowArea = Convert.ToDouble(txtLiquidFollowArea.Text); methodDispense.enableMixFollow = rdMixFollow.IsChecked == true ? true : false; methodDispense.liquidSensorDisIdText = cbxLiquidSensorDisId.Text; methodDispense.liquidSensorDisIdValue = Convert.ToDouble(cbxLiquidSensorDisId.SelectedIndex); //gdLiquidFollow.IsEnabled = false; } } } catch (Exception ex) { } } private void txtLiquidSensorEndDistance_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.liquidSensorEndDistance = Convert.ToDouble(txtLiquidSensorEndDistance.Text); if (string.IsNullOrEmpty(txtLiquidSensorEndDistance.Text)) { txtLiquidSensorEndDistance.BorderBrush = Brushes.Red; txtLiquidSensorEndDistance.BorderThickness = new Thickness(1); tbkErrorLiquidSensorEndDistance.Text = "[0,50]"; tbkErrorLiquidSensorEndDistance.Foreground = Brushes.Red; tbkErrorLiquidSensorEndDistance.Visibility = Visibility.Visible; return; } else if (Convert.ToDouble(txtLiquidSensorEndDistance.Text) < 0 || Convert.ToDouble(txtLiquidSensorEndDistance.Text) > 50) { txtLiquidSensorEndDistance.BorderBrush = Brushes.Red; txtLiquidSensorEndDistance.BorderThickness = new Thickness(1); tbkErrorLiquidSensorEndDistance.Text = "[0,50]"; tbkErrorLiquidSensorEndDistance.Foreground = Brushes.Red; tbkErrorLiquidSensorEndDistance.Visibility = Visibility.Visible; return; } else { txtLiquidSensorEndDistance.BorderBrush = Brushes.Transparent; txtLiquidSensorEndDistance.BorderThickness = new Thickness(0); tbkErrorLiquidSensorEndDistance.Foreground = Brushes.Red; tbkErrorLiquidSensorEndDistance.Visibility = Visibility.Hidden; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); txtLiquidSensorEndDistance.BorderBrush = Brushes.Red; txtLiquidSensorEndDistance.BorderThickness = new Thickness(1); return; } } private void txtLiquidSensorSpeed_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.liquidSensorSpeed = Convert.ToDouble(txtLiquidSensorSpeed.Text); validationMixDispenseSpeed(txtLiquidSensorSpeed, tbkErrorLiquidSensorSpeed); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); txtLiquidSensorSpeed.BorderBrush = Brushes.Red; tbkErrorLiquidSensorSpeed.Text = "[1,100]"; tbkErrorLiquidSensorSpeed.Foreground = Brushes.Red; tbkErrorLiquidSensorSpeed.Visibility = Visibility.Visible; return; } } public void validationMixDispenseSpeed(TextBox textBoxObj,TextBlock textBlockObj) { string volumeString = textBoxObj.Text; Regex rg = new Regex(@"^[1-9]\\d*.\\d*|0\\.\\d*[1-9]\\d*$"); if (string.IsNullOrEmpty(volumeString)) { textBoxObj.BorderBrush = Brushes.Red; textBlockObj.Text = "[1,100]"; textBlockObj.Foreground = Brushes.Red; textBlockObj.Visibility = Visibility.Visible; return; } else if (rg.IsMatch(volumeString)) { textBoxObj.BorderBrush = Brushes.Red; textBlockObj.Text = "[1,100]"; textBlockObj.Foreground = Brushes.Red; textBlockObj.Visibility = Visibility.Visible; return; } else if (Convert.ToDouble(volumeString) < 0 || Convert.ToDouble(volumeString) > 100) { textBoxObj.BorderBrush = Brushes.Red; textBlockObj.Text = "[1,100]"; textBlockObj.Foreground = Brushes.Red; textBlockObj.Visibility = Visibility.Visible; return; } else { textBoxObj.BorderBrush = Brushes.Transparent; textBlockObj.Foreground = Brushes.Transparent; textBlockObj.Visibility = Visibility.Hidden; } } private void txtLiquidSensorRadio_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.liquidSensorRadio = Convert.ToDouble(txtLiquidSensorRadio.Text); if (string.IsNullOrEmpty(txtLiquidSensorRadio.Text)) { txtLiquidSensorRadio.BorderBrush = Brushes.Red; txtLiquidSensorRadio.BorderThickness = new Thickness(1); tbkErrorLiquidSensorRadio.Text = "[0,100]"; tbkErrorLiquidSensorRadio.Foreground = Brushes.Red; tbkErrorLiquidSensorRadio.Visibility = Visibility.Visible; return; } else if (Convert.ToDouble(txtLiquidSensorRadio.Text) < 0 || Convert.ToDouble(txtLiquidSensorRadio.Text) > 100) { txtLiquidSensorRadio.BorderBrush = Brushes.Red; txtLiquidSensorRadio.BorderThickness = new Thickness(1); tbkErrorLiquidSensorRadio.Text = "[0,100]"; tbkErrorLiquidSensorRadio.Foreground = Brushes.Red; tbkErrorLiquidSensorRadio.Visibility = Visibility.Visible; return; } else { txtLiquidSensorRadio.BorderBrush = Brushes.Transparent; txtLiquidSensorRadio.BorderThickness = new Thickness(0); tbkErrorLiquidSensorRadio.Foreground = Brushes.Red; tbkErrorLiquidSensorRadio.Visibility = Visibility.Hidden; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); txtLiquidSensorRadio.BorderBrush = Brushes.Red; txtLiquidSensorRadio.BorderThickness = new Thickness(1); return; } } private void cbxLiquidFollowType_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cbxLiquidFollowType.SelectedIndex == 1) { bdrFollowOneType.Visibility = Visibility.Visible; tbkFollowTwoTypeLabel.Visibility = Visibility.Collapsed; txtLiquidFollowArea.Visibility = Visibility.Collapsed; tbkFollowTwoTypeUnit.Visibility = Visibility.Collapsed; if (methodDispense != null) { methodDispense.liquidFollowType = cbxLiquidFollowType.SelectedIndex; methodDispense.liquidFollowTypeName = ((string)cbxLiquidFollowType.SelectedItem).ToString(); } } else if (cbxLiquidFollowType.SelectedIndex == 2) { bdrFollowOneType.Visibility = Visibility.Collapsed; tbkFollowTwoTypeLabel.Visibility = Visibility.Visible; txtLiquidFollowArea.Visibility = Visibility.Visible; tbkFollowTwoTypeUnit.Visibility = Visibility.Visible; if (methodDispense != null) { methodDispense.liquidFollowType = cbxLiquidFollowType.SelectedIndex; methodDispense.liquidFollowTypeName = ((string)cbxLiquidFollowType.SelectedItem).ToString(); } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void txtLiquidFollowDistance_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.liquidFollowDistance = Convert.ToDouble(txtLiquidFollowDistance.Text); //if(methodDispense.mixAspiratePositionText.Equals("Top")) //{ if (string.IsNullOrEmpty(txtLiquidFollowDistance.Text)) { txtLiquidFollowDistance.BorderBrush = Brushes.Red; txtLiquidFollowDistance.BorderThickness = new Thickness(1); tbkErrorLiquidFollowDistance.Text = "[0,50]"; tbkErrorLiquidFollowDistance.Foreground = Brushes.Red; tbkErrorLiquidFollowDistance.Visibility = Visibility.Visible; return; } else if (Convert.ToDouble(txtLiquidFollowDistance.Text) < 0 || Convert.ToDouble(txtLiquidFollowDistance.Text) > 50) { txtLiquidFollowDistance.BorderBrush = Brushes.Red; txtLiquidFollowDistance.BorderThickness = new Thickness(1); tbkErrorLiquidFollowDistance.Text = "[0,50]"; tbkErrorLiquidFollowDistance.Foreground = Brushes.Red; tbkErrorLiquidFollowDistance.Visibility = Visibility.Visible; return; } else { txtLiquidFollowDistance.BorderBrush = Brushes.Transparent; txtLiquidFollowDistance.BorderThickness = new Thickness(0); tbkErrorLiquidFollowDistance.Foreground = Brushes.Red; tbkErrorLiquidFollowDistance.Visibility = Visibility.Hidden; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); txtLiquidFollowDistance.BorderBrush = Brushes.Red; txtLiquidFollowDistance.BorderThickness = new Thickness(1); return; } } private void txtLiquidFollowSpeed_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.liquidFollowSpeed = Convert.ToDouble(txtLiquidFollowSpeed.Text); validationMixDispenseSpeed(txtLiquidFollowSpeed, tbkErrorLiquidFollowSpeed); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); txtLiquidFollowSpeed.BorderBrush = Brushes.Red; tbkErrorLiquidFollowSpeed.Text = "[1,100]"; tbkErrorLiquidFollowSpeed.Foreground = Brushes.Red; tbkErrorLiquidFollowSpeed.Visibility = Visibility.Visible; return; } } private void txtLiquidFollowArea_TextChanged(object sender, TextChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.liquidFollowArea = Convert.ToDouble(txtLiquidSensorRadio.Text); //if(methodDispense.mixAspiratePositionText.Equals("Top")) //{ if (string.IsNullOrEmpty(txtLiquidSensorRadio.Text)) { txtLiquidSensorRadio.BorderBrush = Brushes.Red; txtLiquidSensorRadio.BorderThickness = new Thickness(1); tbkErrorLiquidFollowArea.Text = "[0,30000]"; tbkErrorLiquidFollowArea.Foreground = Brushes.Red; tbkErrorLiquidFollowArea.Visibility = Visibility.Visible; return; } else if (Convert.ToDouble(txtLiquidSensorRadio.Text) < 0 || Convert.ToDouble(txtLiquidSensorRadio.Text) > 30000) { txtLiquidSensorRadio.BorderBrush = Brushes.Red; txtLiquidSensorRadio.BorderThickness = new Thickness(1); tbkErrorLiquidFollowArea.Text = "[0,30000]"; tbkErrorLiquidFollowArea.Foreground = Brushes.Red; tbkErrorLiquidFollowArea.Visibility = Visibility.Visible; return; } else { txtLiquidSensorRadio.BorderBrush = Brushes.Transparent; txtLiquidSensorRadio.BorderThickness = new Thickness(0); tbkErrorLiquidFollowArea.Foreground = Brushes.Red; tbkErrorLiquidFollowArea.Visibility = Visibility.Hidden; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); txtLiquidSensorRadio.BorderBrush = Brushes.Red; txtLiquidSensorRadio.BorderThickness = new Thickness(1); return; } } private void rdMixFollow_Checked(object sender, RoutedEventArgs e) { try { if (rdMixFollow.IsChecked == true) { if (methodDispense != null) { methodDispense.enableMixFollow = true; } } else { if (methodDispense != null) { methodDispense.enableMixFollow = false; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); return; } } private void rdMixNotFollow_Checked(object sender, RoutedEventArgs e) { try { if (rdMixNotFollow.IsChecked == true) { if (methodDispense != null) { methodDispense.enableMixFollow = false; } } else { if (methodDispense != null) { methodDispense.enableMixFollow = true; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); return; } } private void checkboxMultiMix_Click(object sender, RoutedEventArgs e) { try { if ((bool)checkboxMultiMix.IsChecked) { if (methodDispense != null) { methodDispense.bMultiMix = true; } } else { if (methodDispense != null) { methodDispense.bMultiMix = false; } } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void cbxDispenseBlockDealType_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (methodDispense != null) { methodDispense.dispenseBlockDisIdText = ((string)cbxDispenseBlockDealType.SelectedItem).ToString(); methodDispense.dispenseBlockDisIdValue = cbxDispenseBlockDealType.SelectedIndex; } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } private void wellPlate_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { try { tbxWellPositionTips.Text = wellPlate.Selection; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } } }