using DataEntity.Share; using DataRWDAL; using DataRWDalDrive.DB; using HxEnum; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using XCommon.Log; using XHandler.Class.DataEx; using XImagingXhandler.XDAL; namespace XHandler.View.MethodProperty { /// /// 挑菌前环境设置子页面 /// public partial class ChoiceAgoAspirateChildProperty : System.Windows.Controls.UserControl { #region 变量 private int mark = 0; public MethodChoiceAgoAspirateChild m_choiceAgoAspirateData = null; #endregion #region 构造函数 public ChoiceAgoAspirateChildProperty(MethodChoiceAgoAspirateChild choiceAgoAspirateData) { mark = 0; InitializeComponent(); m_choiceAgoAspirateData = choiceAgoAspirateData; #region 液体类型下拉值 ObservableCollection liquidTypeList = DataModule.getInstance().GetLiquidTypes(); cbLiquidType1.ItemsSource = liquidTypeList; #endregion #region 获取液体范围类型下拉值 ObservableCollection liquidRangeList = DataModule.getInstance().GetLiquidRanges(); cbLiquidRange1.ItemsSource = liquidRangeList; #endregion tbxTablePos.Text = m_choiceAgoAspirateData.positionText; this.DataContext = m_choiceAgoAspirateData; } #endregion #region 页面初始化 private void UserControl_Loaded(object sender, RoutedEventArgs e) { try { mark += 1; if (!string.IsNullOrEmpty(m_choiceAgoAspirateData.armValue)) { // 根据板位上的耗材类型,显示耗材孔位示意图 Labware labwareA = DataRWDAL.LabwareDB.GetLabware(m_choiceAgoAspirateData.labwareValue); wellPlate.Rows = labwareA.number_row; wellPlate.Columns = labwareA.number_column; tbxWellPositionTips.Text = m_choiceAgoAspirateData.wellarray; wellPlate.Selection = m_choiceAgoAspirateData.wellarray; tbxWellvolume.Text = m_choiceAgoAspirateData.wellvolume.ToString(); // 液体 cbLiquidType1.SelectedValue = m_choiceAgoAspirateData.liquididValue1; cbLiquidRange1.SelectedValue = m_choiceAgoAspirateData.liquidrangeidValue1; cbLiquid1.SelectedValue = m_choiceAgoAspirateData.liquidpidValue1; // 开启挑菌前吸液 cbOpenAspirate.IsChecked = m_choiceAgoAspirateData.bEnableBeforeAspirate; } else { ObservableCollection liquidList = new ObservableCollection(); Liquid liquid = new Liquid(); liquid.liquid_id = string.Empty; liquid.liquid_name = Properties.Resources.strPleaseSelect; liquidList.Insert(0, liquid); cbLiquid1.ItemsSource = liquidList; cbLiquid1.SelectedIndex = 0; } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #region 台面位置 private void tbxTablePos_TextChanged(object sender, TextChangedEventArgs e) { tbxWellPositionTips.Text = string.Empty; } #endregion #region 开启挑菌前吸液 private void cbOpenAspirate_Click(object sender, RoutedEventArgs e) { try { m_choiceAgoAspirateData.bEnableBeforeAspirate = (bool)cbOpenAspirate.IsChecked; } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); } } #endregion #region 试剂槽孔位选择变更 private void tbxWellPositionTips_TextChanged(object sender, TextChangedEventArgs e) { try { if (m_choiceAgoAspirateData != null) { m_choiceAgoAspirateData.wellarray = tbxWellPositionTips.Text; validationWellPosition(); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); tbxWellPositionTips.BorderBrush = Brushes.Red; tbxWellPositionTips.BorderThickness = new Thickness(1); tbkErrorWellPosition.Text = "请先选择孔位"; tbkErrorWellPosition.Foreground = Brushes.Red; tbkErrorWellPosition.Visibility = Visibility.Visible; return; } } public void validationWellPosition() { string wellString = tbxWellPositionTips.Text; if (string.IsNullOrEmpty(wellString)) { tbxWellPositionTips.BorderBrush = Brushes.Red; tbxWellPositionTips.BorderThickness = new Thickness(1); tbkErrorWellPosition.Text = "请先选择孔位"; tbkErrorWellPosition.Foreground = Brushes.Red; tbkErrorWellPosition.Visibility = Visibility.Visible; return; } else if (wellString.Contains("=") && !wellString.Substring(0, 1).Equals("=")) { tbxWellPositionTips.BorderBrush = Brushes.Red; tbxWellPositionTips.BorderThickness = new Thickness(1); tbkErrorWellPosition.Text = "输入的孔位,包含“=”时,格式应为:=i,i为命令前设置的变量名称"; tbkErrorWellPosition.TextWrapping = TextWrapping.WrapWithOverflow; tbkErrorWellPosition.Foreground = Brushes.Red; tbkErrorWellPosition.Visibility = Visibility.Visible; return; } else if (wellString.Contains("&") && !wellString.Substring(0, 1).Equals("&")) { tbxWellPositionTips.BorderBrush = Brushes.Red; tbxWellPositionTips.BorderThickness = new Thickness(1); tbkErrorWellPosition.Text = "输入的孔位,包含“&”时,格式应为:&i,i为命令前设置的变量名称"; tbkErrorWellPosition.TextWrapping = TextWrapping.WrapWithOverflow; tbkErrorWellPosition.Foreground = Brushes.Red; tbkErrorWellPosition.Visibility = Visibility.Visible; return; } else if (wellString.Contains(";") || wellString.Contains("|") || wellString.Contains("*") || wellString.Contains("!") || wellString.Contains("@") || wellString.Contains("#") || wellString.Contains("$") || wellString.Contains("%") || wellString.Contains("^") || wellString.Contains("(") || wellString.Contains(")") || wellString.Contains("{") || wellString.Contains("}") || wellString.Contains("[") || wellString.Contains("]") || wellString.Contains("?") || wellString.Contains("/") || wellString.Contains("\\") || wellString.Contains("~") || wellString.Contains("`") || wellString.Contains(":") || wellString.Contains("\"") || wellString.Contains("'")) { tbxWellPositionTips.BorderBrush = Brushes.Red; tbxWellPositionTips.BorderThickness = new Thickness(1); tbkErrorWellPosition.Text = "输入的孔位,不能包含“;”、“|”、“*”、“!”、“@”、“#”、“$”、“%”、" + "“^”、“(”、“)”、“{”、“}”、“[”、“]”、“?”、“/”、“\\”、“~”、" + "“`”、“:”、“\"”、“'”"; tbkErrorWellPosition.TextWrapping = TextWrapping.WrapWithOverflow; tbkErrorWellPosition.Foreground = Brushes.Red; tbkErrorWellPosition.Visibility = Visibility.Visible; return; } else { tbxWellPositionTips.BorderBrush = Brushes.Transparent; tbxWellPositionTips.BorderThickness = new Thickness(0); tbkErrorWellPosition.Foreground = Brushes.Transparent; tbkErrorWellPosition.Visibility = Visibility.Hidden; } } #endregion #region 每孔体积 (μL) private void tbxWellvolume_TextChanged(object sender, TextChangedEventArgs e) { try { if (m_choiceAgoAspirateData != null) { m_choiceAgoAspirateData.wellvolume = Convert.ToDouble(tbxWellvolume.Text); validationWellVolume(); } } catch (Exception ex) { LoggerHelper.ErrorLog("ERROR:", ex); tbxWellvolume.BorderBrush = Brushes.Red; tbkErrorWellVolume.Text = "每孔体积值:[0,1000]之间"; tbkErrorWellVolume.Foreground = Brushes.Red; tbkErrorWellVolume.Visibility = Visibility.Visible; return; } } public void validationWellVolume() { string volumeString = tbxWellvolume.Text; Regex rg = new Regex(@"^[1-9]\\d*.\\d*|0\\.\\d*[1-9]\\d*$"); if (string.IsNullOrEmpty(volumeString)) { tbxWellvolume.BorderBrush = Brushes.Red; tbkErrorWellVolume.Text = "每孔体积值:[0,1000]之间"; tbkErrorWellVolume.Foreground = Brushes.Red; tbkErrorWellVolume.Visibility = Visibility.Visible; return; } else if (rg.IsMatch(volumeString)) { tbxWellvolume.BorderBrush = Brushes.Red; tbkErrorWellVolume.Text = "每孔体积值:[0,1000]之间"; tbkErrorWellVolume.Foreground = Brushes.Red; tbkErrorWellVolume.Visibility = Visibility.Visible; return; } else if (Convert.ToDouble(volumeString) < 0 || Convert.ToDouble(volumeString) > 1000) { tbxWellvolume.BorderBrush = Brushes.Red; tbkErrorWellVolume.Text = "[0,1000]之间"; tbkErrorWellVolume.Foreground = Brushes.Red; tbkErrorWellVolume.Visibility = Visibility.Visible; return; } else { tbxWellvolume.BorderBrush = Brushes.Transparent; tbkErrorWellVolume.Foreground = Brushes.Transparent; tbkErrorWellVolume.Visibility = Visibility.Hidden; } } #endregion #region 选择液体类型 private void cbLiquidType1_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (mark == 1) { if (m_choiceAgoAspirateData != null) { m_choiceAgoAspirateData.liquididText1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_name.ToString(); if (m_choiceAgoAspirateData.liquididText1 != "请选择类型") { m_choiceAgoAspirateData.liquididValue1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_id.ToString(); } else { m_choiceAgoAspirateData.liquididValue1 = "0"; } } } else { if (cbLiquidType1.SelectedIndex < 0) return; if (cbLiquidType1.SelectedIndex == 0) { cbLiquidRange1.SelectedIndex = 0; cbLiquid1.SelectedIndex = 0; } if (cbLiquidType1.SelectedIndex != 0) { m_choiceAgoAspirateData.liquididText1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_name.ToString(); m_choiceAgoAspirateData.liquididValue1 = ((LiquidType)cbLiquidType1.SelectedItem).liquid_type_id.ToString(); } } } #endregion #region 选择液体范围 private void cbLiquidRange1_SelectionChanged(object sender, SelectionChangedEventArgs e) { string typeID = cbLiquidType1.SelectedValue as string; string rangeID = cbLiquidRange1.SelectedValue as string; string armID = m_choiceAgoAspirateData.armValue; ObservableCollection liquidList = LiquidTypeRSRangeDB.GetLiquidFromdbByTypeAndRange(typeID, rangeID, armID); Liquid liquid = new Liquid(); liquid.liquid_id = string.Empty; liquid.liquid_name = Properties.Resources.strPleaseSelect; liquidList.Insert(0, liquid); cbLiquid1.ItemsSource = liquidList; if (mark == 1) { if (m_choiceAgoAspirateData != null) { if ((LiquidRange)cbLiquidRange1.SelectedItem != null) { m_choiceAgoAspirateData.liquidrangeidText1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_name.ToString(); m_choiceAgoAspirateData.liquidrangeidValue1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_id.ToString(); } } } else { if (cbLiquidRange1.SelectedIndex < 0) { return; } if (cbLiquidRange1.SelectedIndex != 0) { m_choiceAgoAspirateData.liquidrangeidText1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_name.ToString(); m_choiceAgoAspirateData.liquidrangeidValue1 = ((LiquidRange)cbLiquidRange1.SelectedItem).liquid_range_id.ToString(); } } } #endregion #region 选择液体 private void cbLiquid1_SelectionChanged(object sender, SelectionChangedEventArgs e) { Liquid liquid = cbLiquid1.SelectedItem as Liquid; if (liquid != null) { m_choiceAgoAspirateData.liquidpidText1 = liquid.liquid_name; m_choiceAgoAspirateData.liquidpidValue1 = liquid.liquid_id; } } #endregion #region 私有方法 public void SetTableName(string tableName, Labware lb) { if (lb == null) return; if (string.IsNullOrEmpty(lb.labware_id)) return; if (string.IsNullOrEmpty(m_choiceAgoAspirateData.armValue)) { MessageBox.Show(Properties.Resources.msgPlsSelectArm, "Tips"); return; } wellPlate.Rows = lb.number_row; wellPlate.Columns = lb.number_column; List latticeList = DataRWDAL.LatticeDB.GetLatticeDataFromdb(Shared.SoftwareInformation.software_device_number, Convert.ToInt32(m_choiceAgoAspirateData.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; } tbxTablePos.Text = tableName; if (m_choiceAgoAspirateData != null) { m_choiceAgoAspirateData.positionText = tableName; m_choiceAgoAspirateData.positionValue = lattice.lattice_id; m_choiceAgoAspirateData.labwareText = lb.labware_name; m_choiceAgoAspirateData.labwareValue = lb.labware_id; } } // 根据挑菌方式,改变页面 public void ChangeDisp(int choiceMode) { // 吸液 if (choiceMode == EnumManagement.GetEnumValue(ChoiceModeEnum.AspirateMode)) { cbOpenAspirate.IsChecked = true; // 隐藏台面、孔位 tbxTablePosTitle.Visibility = Visibility.Collapsed; tbxTablePos.Visibility = Visibility.Collapsed; cbOpenAspirate.Visibility = Visibility.Collapsed; tbxWellPositionTipsTitle.Visibility = Visibility.Collapsed; tbxWellPositionTips.Visibility = Visibility.Collapsed; tbkErrorWellPosition.Visibility = Visibility.Collapsed; wellPlateSelectTip.Visibility = Visibility.Collapsed; wellPlate.Visibility = Visibility.Collapsed; } else { // 显示台面、孔位 tbxTablePosTitle.Visibility = Visibility.Visible; tbxTablePos.Visibility = Visibility.Visible; cbOpenAspirate.Visibility = Visibility.Visible; tbxWellPositionTipsTitle.Visibility = Visibility.Visible; tbxWellPositionTips.Visibility = Visibility.Visible; tbkErrorWellPosition.Visibility = Visibility.Visible; wellPlateSelectTip.Visibility = Visibility.Visible; wellPlate.Visibility = Visibility.Visible; } } #endregion } }