private bool FillCheckBox(FillParameter3C fillParameter, IntPtr container) { FillValue3C value = _pageData[fillParameter.Key] as FillValue3C; if (value == null || string.IsNullOrEmpty(value.Value)) { return(false); } string[] values = value.Value.Split(fillParameter.Separators[0]); List <string> valueList = new List <string>(); foreach (var item in values) { valueList.AddRange(item.Split('|')); } return(ApiSetter.CheckCheckBox(container, this, value.Note, valueList)); }
private bool FillValue(string className, ref int index, IntPtr handle, FillValue3C value) { _asyncHandle.Wait(); string parameterValue = null; if (value == null) { return(false); } FillParameter3C parameter = _fillParameters[value.Key] as FillParameter3C; if (index == -1) { parameterValue = value.Value; } else { string[] values = value.Value == null ? null : value.Value.Split(parameter.Separators[0]); parameterValue = (values == null || values.Length <= index) ? (string.IsNullOrEmpty(value.Note) ? "" : value.Note) : values[index]; } StringBuilder text = null; switch (className) { case CCCFillManager.EditClassName: if (ApiSetter.IsEditable(handle, _handle) == false) { index--; break; } ApiSetter.SetText(handle, parameterValue); break; case CCCFillManager.ComboBoxClassName: if (ApiSetter.IsEditable(handle, _handle) == false) { index--; break; } ApiSetter.SetComboBoxSelected(_handle, handle, parameterValue, parameter.IsComboBoxPreciseMatch); break; case CCCFillManager.ButtonClassName: value.Separators = parameter.Separators; text = new StringBuilder(256); NativeApi.GetWindowText(handle, text, 255); if (text.ToString() == "附件" && value != null && string.IsNullOrEmpty(value.AttachFile) == false) { return(ApiSetter.ClickButton(handle, _handle, ListenAttachWindow, value)); } else if (text.ToString() == "编辑") { if (string.IsNullOrEmpty(value.OriginString)) { return(false); } if (string.IsNullOrEmpty(parameter.EditType)) { parameter.EditType = "add"; } switch (parameter.EditType.ToLower()) { case "add": return(ApiSetter.ClickButton(handle, _handle, ListenAddWindow, value)); case "radio": return(ApiSetter.ClickButton(handle, _handle, ListenRadioWindow, value)); case "select": return(ApiSetter.ClickButton(handle, _handle, ListenListBoxWindow, value)); case "multiselect": value.DoubleClick = true; return(ApiSetter.ClickButton(handle, _handle, ListenListBoxWindow, value)); case "text": return(ApiSetter.ClickButton(handle, _handle, ListenTextWindow, value)); case "column": return(ApiSetter.ClickButton(handle, _handle, ListenColumnWindow, value)); case "multinote": return(ApiSetter.ClickButton(handle, _handle, ListenMultiValueAndNoteWindow, value)); default: return(false); } } else { } break; } return(true); }
/// <summary> /// 根据参数键值及控件句柄填写参数。 /// </summary> /// <param name="key"></param> /// <param name="fillControl"></param> /// <returns></returns> private bool FillValue(string key, object fillControl) { IntPtr current = IntPtr.Zero; List <IntPtr> list = fillControl as List <IntPtr>; if (list != null && list.Count == 0) { return(true); } if (string.IsNullOrEmpty(key)) { return(true); } FillParameter3C fillParameter = _fillParameters[key] as FillParameter3C; if (fillParameter == null) { fillParameter = new FillParameter3C() { Key = key, Separators = FillParameter3C.DefaultSeparators }; _fillParameters.Add(key, fillParameter); } FillValue3C fillValue = _pageData[key] as FillValue3C; if (fillValue == null) { Records.Add(new FillRecord(ElementType.Unknown, RecordType.Failed, "数据文件中未定义此参数", key)); return(true); } StringBuilder className = new StringBuilder(256); string name = ""; if (list != null) { current = list[0]; className = new StringBuilder(256); NativeApi.GetClassName(current, className, 255); name = className.ToString(); // 勾选是否适用复选框 if (name.StartsWith(CCCFillManager.ButtonClassName)) { if (fillValue.Value == "N/A") { if (ApiSetter.IsDisabled(current) == false) { ApiSetter.SetCheck(current, this.Hwnd); //ApiSetter.ClickButton(current, this.Hwnd, null, null); return(true); } } current = list.Count > 1 ? list[list.Count - 1] : current; } } else { current = (IntPtr)fillControl; } if (fillParameter.Type == "5" || fillParameter.Type == "7") { return(FillCheckBox(fillParameter, current)); } className.Clear(); NativeApi.GetClassName(current, className, 255); name = className.ToString(); if (name.StartsWith(CCCFillManager.StaticClassName)) { return(true); } else if (name.StartsWith(CCCFillManager.EditClassName)) { return(FillValue(CCCFillManager.EditClassName, current, fillValue)); } else if (name.StartsWith(CCCFillManager.ButtonClassName)) { return(FillValue(CCCFillManager.ButtonClassName, current, fillValue)); } else if (name.StartsWith(CCCFillManager.ComboBoxClassName)) { #if export sheet.WriteNextRow(); sheet.WriteTextCell(1, writer.AddSharedString(key)); #endif return(FillValue(CCCFillManager.ComboBoxClassName, current, fillValue)); } else { // 多值填报 List <IntPtr> sortedControl = ControlSorter.SortContainer(current); if (sortedControl == null) { return(false); } else if (sortedControl.Count == 1) { return(FillValue(key, sortedControl[0])); } int valueIndex = 0; for (int i = 0; i < sortedControl.Count; i++, valueIndex++) { className.Clear(); NativeApi.GetClassName(sortedControl[i], className, 255); if (className.ToString().StartsWith(CCCFillManager.ButtonClassName)) { FillValue(CCCFillManager.ButtonClassName, ref valueIndex, sortedControl[i], fillValue); } else if (className.ToString().StartsWith(CCCFillManager.ComboBoxClassName)) { #if export sheet.WriteNextRow(); sheet.WriteTextCell(1, writer.AddSharedString(key)); #endif FillValue(CCCFillManager.ComboBoxClassName, ref valueIndex, sortedControl[i], fillValue); } else if (className.ToString().StartsWith(CCCFillManager.EditClassName)) { FillValue(CCCFillManager.EditClassName, ref valueIndex, sortedControl[i], fillValue); } } } return(true); }
/// <summary> /// 读取填报规则。 /// </summary> /// <param name="fileName"></param> /// <returns></returns> private Hashtable ReadFillParameter(string fileName) { Hashtable columnHeader = new Hashtable(); Hashtable fillParameters = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate("填报规则") as Office.Excel.ForwardReadWorksheet; if (sheet != null) { object header = null; if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1) { while (sheet.ReadNextCell(false)) { header = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, header == null ? "" : header.ToString()); } } FillParameter3C fillParameter = null; object content = null; string str = null; while (sheet.ReadNextRow()) { fillParameter = new FillParameter3C(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "参数编号": fillParameter.Key = str; break; case "类型": fillParameter.Type = str; break; case "编辑窗口类型": fillParameter.EditType = str; break; case "下拉框选择方式": fillParameter.IsComboBoxPreciseMatch = str == "包含"; break; case "参数分割符": fillParameter.SetSeparator(str); break; } } if (string.IsNullOrEmpty(fillParameter.Key) == false) { fillParameters.Add(fillParameter.Key, fillParameter); } } } } return(fillParameters); }