private void btnOk_Click(object sender, EventArgs e) { // проверка введённых данных StringBuilder errors = new StringBuilder(); string errMsg; if (!AppUtils.ValidateInt(txtCnlNum.Text, 1, ushort.MaxValue, out errMsg)) { errors.AppendLine(AppPhrases.IncorrectInCnlNum).AppendLine(errMsg); } if (txtName.Text == "") { errors.AppendLine(AppPhrases.IncorrectInCnlName).AppendLine(CommonPhrases.NonemptyRequired); } if (cbCnlType.SelectedValue == null) { errors.AppendLine(AppPhrases.IncorrectCnlType).AppendLine(CommonPhrases.NonemptyRequired); } if (txtSignal.Text != "" && !AppUtils.ValidateInt(txtSignal.Text, 1, int.MaxValue, out errMsg)) { errors.AppendLine(AppPhrases.IncorrectSignal).AppendLine(errMsg); } string ctrlCnlNum = txtCtrlCnlNum.Text; if (ctrlCnlNum != "") { if (AppUtils.ValidateInt(ctrlCnlNum, 1, ushort.MaxValue, out errMsg)) { if (Tables.GetCtrlCnlName(int.Parse(ctrlCnlNum)) == "") { errors.AppendLine(AppPhrases.IncorrectCtrlCnlNum). AppendLine(string.Format(AppPhrases.CtrlCnlNotExists, ctrlCnlNum)); } } else { errors.AppendLine(AppPhrases.IncorrectCtrlCnlNum).AppendLine(errMsg); } } if (txtLimLowCrash.Text != "" && !AppUtils.ValidateDouble(txtLimLowCrash.Text, out errMsg)) { errors.AppendLine(AppPhrases.IncorrectLimLowCrash).AppendLine(errMsg); } if (txtLimLow.Text != "" && !AppUtils.ValidateDouble(txtLimLow.Text, out errMsg)) { errors.AppendLine(AppPhrases.IncorrectLimLow).AppendLine(errMsg); } if (txtLimHigh.Text != "" && !AppUtils.ValidateDouble(txtLimHigh.Text, out errMsg)) { errors.AppendLine(AppPhrases.IncorrectLimHigh).AppendLine(errMsg); } if (txtLimHighCrash.Text != "" && !AppUtils.ValidateDouble(txtLimHighCrash.Text, out errMsg)) { errors.AppendLine(AppPhrases.IncorrectLimHighCrash).AppendLine(errMsg); } errMsg = errors.ToString().TrimEnd(); if (errMsg == "") { // передача свойств входного канала в редактируемую таблицу try { DataRowView dataRow = frmTable.Table.DefaultView[row.Index]; dataRow["Active"] = chkActive.Checked; dataRow["CnlNum"] = txtCnlNum.Text; dataRow["Name"] = txtName.Text; dataRow["CnlTypeID"] = cbCnlType.SelectedValue; dataRow["ModifiedDT"] = DateTime.Now; dataRow["ObjNum"] = cbObj.SelectedValue; dataRow["KPNum"] = cbKP.SelectedValue; dataRow["Signal"] = txtSignal.Text == "" ? DBNull.Value : (object)txtSignal.Text; dataRow["FormulaUsed"] = chkFormulaUsed.Checked; dataRow["Formula"] = txtFormula.Text == "" ? DBNull.Value : (object)txtFormula.Text; dataRow["Averaging"] = chkAveraging.Checked; dataRow["ParamID"] = cbParam.SelectedValue; dataRow["FormatID"] = cbFormat.SelectedValue; dataRow["UnitID"] = cbUnit.SelectedValue; dataRow["CtrlCnlNum"] = txtCtrlCnlNum.Text == "" ? DBNull.Value : (object)txtCtrlCnlNum.Text; dataRow["EvEnabled"] = chkEvEnabled.Checked; dataRow["EvSound"] = chkEvSound.Checked; dataRow["EvOnChange"] = chkEvOnChange.Checked; dataRow["EvOnUndef"] = chkEvOnUndef.Checked; dataRow["LimLowCrash"] = txtLimLowCrash.Text == "" ? DBNull.Value : (object)txtLimLowCrash.Text; dataRow["LimLow"] = txtLimLow.Text == "" ? DBNull.Value : (object)txtLimLow.Text; dataRow["LimHigh"] = txtLimHigh.Text == "" ? DBNull.Value : (object)txtLimHigh.Text; dataRow["LimHighCrash"] = txtLimHighCrash.Text == "" ? DBNull.Value : (object)txtLimHighCrash.Text; DialogResult = DialogResult.OK; } catch (Exception ex) { AppUtils.ProcError(AppPhrases.WriteInCnlPropsError + ":\r\n" + ex.Message); DialogResult = DialogResult.Cancel; } } else { ScadaUiUtils.ShowError(errMsg); } }
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { appData.ErrLog.WriteException(e.Exception, CommonPhrases.UnhandledException); ScadaUiUtils.ShowError(CommonPhrases.UnhandledException + ":" + Environment.NewLine + e.Exception.Message); }
/// <summary> /// Импорт линий связи и КП /// </summary> public static DialogResult Import(DataTable tblCommLine, DataTable tblKP, Log errLog, out FrmImport frmImport) { frmImport = null; try { if (tblCommLine.DefaultView.Count == 0) { ScadaUiUtils.ShowInfo(AppPhrases.NoImportData); return(DialogResult.Cancel); } else { // заполнение дерева импортируемых данных: линий связи и КП frmImport = new FrmImport(); TreeView treeView = frmImport.TreeView; try { treeView.BeginUpdate(); treeView.Nodes.Clear(); tblCommLine.DefaultView.Sort = "CommLineNum"; tblKP.DefaultView.Sort = "CommLineNum, KPNum"; int kpCnt = tblKP.DefaultView.Count; int kpInd = 0; foreach (DataRowView rowLine in tblCommLine.DefaultView) { int lineNum = (int)rowLine["CommLineNum"]; TreeNode nodeLine = new TreeNode(Settings.CommLine.GetCaption(lineNum, rowLine["Name"])); nodeLine.Tag = rowLine; treeView.Nodes.Add(nodeLine); DataRowView rowKP = kpInd < kpCnt ? tblKP.DefaultView[kpInd] : null; int kpLineNum = rowKP == null ? -1 : (int)rowKP["CommLineNum"]; while (0 <= kpLineNum && kpLineNum <= lineNum) { if (kpLineNum == lineNum) { TreeNode nodeKP = new TreeNode(Settings.KP.GetCaption((int)rowKP["KPNum"], rowKP["Name"])); nodeKP.Tag = rowKP; nodeLine.Nodes.Add(nodeKP); } kpInd++; rowKP = kpInd < kpCnt ? tblKP.DefaultView[kpInd] : null; kpLineNum = rowKP == null ? -1 : (int)rowKP["CommLineNum"]; } } } finally { treeView.EndUpdate(); } // отображение формы импорта return(frmImport.ShowDialog()); } } catch (Exception ex) { string errMsg = AppPhrases.PrepareImportFormError1 + ":\r\n" + ex.Message; errLog.WriteAction(errMsg); ScadaUiUtils.ShowError(errMsg); return(DialogResult.Abort); } }
private void dataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) { ScadaUiUtils.ShowError(CommonPhrases.GridDataError + ":\r\n" + e.Exception.Message); e.ThrowException = false; }
/// <summary> /// Writes the error to the log and displays a error message. /// </summary> private void ProcError(string message) { errLog.WriteError(message); ScadaUiUtils.ShowError(message); }
public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { ScadaUiUtils.ShowError(e.Exception.Message); }
public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { AppData.ErrLog.WriteException(e.Exception, CommonPhrases.UnhandledException); ScadaUiUtils.ShowError(CommonPhrases.UnhandledException + ":\r\n" + e.Exception.Message); }
private void FrmMain_Load(object sender, EventArgs e) { #if DEBUG System.Diagnostics.Debugger.Launch(); #endif // инициализация общих данных приложения appData.Init(Path.GetDirectoryName(Application.ExecutablePath), this); // локализация LocalizeForm(); LocalizeAttributes(); // проверка существования второй копии приложения if (SecondInstanceExists()) { ScadaUiUtils.ShowInfo(AppPhrases.CloseSecondInstance); Close(); log.WriteAction(Localization.UseRussian ? "Вторая копия Редактора схем закрыта." : "The second instance of Scheme Editor has been closed."); return; } // загрузка настроек приложения string errMsg; if (!settings.Load(appData.AppDirs.ConfigDir + Settings.DefFileName, out errMsg)) { log.WriteError(errMsg); ScadaUiUtils.ShowError(errMsg); } // загрузка компонентов appData.LoadComponents(); // настройка элментов управления lvCompTypes.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); lblStatus.Text = ""; FillComponentTypes(); // создание новой схемы InitScheme(); // загрузка состояния формы FormState formState = new FormState(); if (formState.Load(appData.AppDirs.ConfigDir + FormState.DefFileName, out errMsg)) { ImageEditor.ImageDir = formState.ImageDir; ofdScheme.InitialDirectory = formState.SchemeDir; } else { log.WriteError(errMsg); ScadaUiUtils.ShowError(errMsg); } formState.Apply(this); UpdateFormStateDTO(); // запуск механизма редактора схем if (appData.StartEditor()) { // открытие браузера со страницей редактора OpenBrowser(); } else { ScadaUiUtils.ShowInfo(string.Format(AppPhrases.FailedToStartEditor, log.FileName)); Close(); } }
/// <summary> /// Loads a scheme template if possible. /// </summary> private void LoadSchemeTemplate(bool showMsg) { // display empty data changing = true; cbTitleComponent.DataSource = null; bsBindings.DataSource = null; if (string.IsNullOrEmpty(interfaceDir)) { if (showMsg) { ScadaUiUtils.ShowWarning(AppPhrases.UnableLoadTemplate); } } else { string templateFileName = Path.Combine(interfaceDir, txtTemplateFileName.Text); if (File.Exists(templateFileName)) { if (SchemeParser.Parse(templateFileName, out List <ComponentItem> components, out List <ComponentBindingItem> newComponentBindings, out string errMsg)) { // merge bindings foreach (ComponentBindingItem bindingItem in newComponentBindings) { if (templateBindings.ComponentBindings.TryGetValue(bindingItem.CompID, out ComponentBinding binding)) { bindingItem.InCnlNum = binding.InCnlNum; bindingItem.CtrlCnlNum = binding.CtrlCnlNum; } } templateBindings.ComponentBindings.Clear(); newComponentBindings.ForEach(x => { templateBindings.ComponentBindings[x.CompID] = x; }); // fill the component combo box components.Sort(); cbTitleComponent.ValueMember = "ID"; cbTitleComponent.DisplayMember = "DisplayName"; cbTitleComponent.DataSource = components; cbTitleComponent.SelectedValue = templateBindings.TitleCompID; // display bindings bsBindings.DataSource = templateBindings.ComponentBindings.Values; if (showMsg) { ScadaUiUtils.ShowInfo(AppPhrases.TemplateLoaded); } } else { bsBindings.DataSource = null; ScadaUiUtils.ShowError(errMsg); } } else if (showMsg) { ScadaUiUtils.ShowWarning(string.Format(AppPhrases.TemplateNotFound, templateFileName)); } } changing = false; }
private void FrmMain_Load(object sender, EventArgs e) { // локализация приложения string langDir = AppData.ExeDir + "Lang\\"; string errMsg; if (Localization.LoadingRequired(langDir, "ScadaData")) { if (Localization.LoadDictionaries(langDir, "ScadaData", out errMsg)) { CommonPhrases.Init(); } else { ScadaUiUtils.ShowError(errMsg); } } if (Localization.LoadingRequired(langDir, "ScadaAdmin")) { if (Localization.LoadDictionaries(langDir, "ScadaAdmin", out errMsg)) { Translator.TranslateForm(this, "ScadaAdmin.FrmMain", null, contextExpolorer, contextInCnls); AppPhrases.Init(); winControl.MessageText = AppPhrases.SelectTable; winControl.SaveReqCaption = AppPhrases.SaveReqCaption; winControl.SaveReqQuestion = AppPhrases.SaveReqQuestion; winControl.SaveReqYes = AppPhrases.SaveReqYes; winControl.SaveReqNo = AppPhrases.SaveReqNo; winControl.SaveReqCancel = AppPhrases.SaveReqCancel; } else { ScadaUiUtils.ShowError(errMsg); } } // инициализация дерева проводника InitTreeView(); // установка начального состояния разрешений элементов SetItemsEnabledOnConnect(); SetItemsEnabledOnWindowAction(); // загрузка состояния формы settings = new Settings(); settings.LoadFormState(); if (settings.FormSt.IsEmpty) { WindowState = FormWindowState.Maximized; } else { Left = settings.FormSt.Left; Top = settings.FormSt.Top; Width = settings.FormSt.Width; Height = settings.FormSt.Height; WindowState = settings.FormSt.Maximized ? FormWindowState.Maximized : FormWindowState.Normal; pnlLeft.Width = settings.FormSt.ExplorerWidth; } }
/// <summary> /// Browses the server node. /// </summary> private void BrowseServerNode(TreeNode treeNode) { try { tvServer.BeginUpdate(); bool fillNodeRequired = false; TreeNodeCollection nodeCollection = null; ServerNodeTag serverNodeTag = null; NodeId nodeId = null; if (treeNode == null) { fillNodeRequired = true; nodeCollection = tvServer.Nodes; serverNodeTag = null; nodeId = ObjectIds.ObjectsFolder; } else if (treeNode.Tag is ServerNodeTag nodeTag) { fillNodeRequired = !nodeTag.IsFilled; nodeCollection = treeNode.Nodes; serverNodeTag = nodeTag; nodeId = nodeTag.OpcNodeId; } if (fillNodeRequired && nodeId != null && opcSession != null) { Browser browser = new Browser(opcSession) { BrowseDirection = BrowseDirection.Forward, NodeClassMask = (int)NodeClass.Variable | (int)NodeClass.Object | (int)NodeClass.Method, ReferenceTypeId = ReferenceTypeIds.HierarchicalReferences }; ReferenceDescriptionCollection browseResults = browser.Browse(nodeId); nodeCollection.Clear(); foreach (ReferenceDescription rd in browseResults) { TreeNode childNode = TreeViewUtils.CreateNode(rd.DisplayName, SelectImageKey(rd.NodeClass)); childNode.Tag = new ServerNodeTag(rd, opcSession.NamespaceUris); // allow to expand any node TreeNode emptyNode = TreeViewUtils.CreateNode(KpPhrases.EmptyNode, "empty.png"); childNode.Nodes.Add(emptyNode); nodeCollection.Add(childNode); } if (serverNodeTag != null) { serverNodeTag.IsFilled = true; } } } catch (Exception ex) { ScadaUiUtils.ShowError(KpPhrases.BrowseServerError + ":" + Environment.NewLine + ex.Message); } finally { tvServer.EndUpdate(); } }
/// <summary> /// Отобразить форму настроек приложения /// </summary> public static void Show(TableView.Item item, DataTable tblInCnl, DataTable tblCtrlCnl, DataTable tblObj, DataTable tblKP) { if (item == null) { throw new ArgumentNullException("item"); } if (tblInCnl == null) { throw new ArgumentNullException("tblInCnl"); } if (tblCtrlCnl == null) { throw new ArgumentNullException("tblCtrlCnl"); } if (tblObj == null) { throw new ArgumentNullException("tblObj"); } if (tblKP == null) { throw new ArgumentNullException("tblKP"); } // создание и перевод формы FrmItemInfo frmItemInfo = new FrmItemInfo(); Translator.TranslateForm(frmItemInfo, "ScadaTableEditor.FrmItemInfo"); // получение информации о входном канале if (item.CnlNum > 0) { string cnlNumStr = item.CnlNum.ToString(); frmItemInfo.txtInCnlNum.Text = cnlNumStr; try { DataView view = new DataView(tblInCnl); view.RowFilter = "CnlNum = " + cnlNumStr; if (view.Count > 0) { DataRowView rowView = view[0]; frmItemInfo.txtInCnlName.Text = (string)rowView["Name"]; int objNum = (int)rowView["ObjNum"]; if (objNum > 0) { frmItemInfo.txtInCnlObjNum.Text = objNum.ToString(); frmItemInfo.txtInCnlObjName.Text = GetObjName(objNum, tblObj); } int kpNum = (int)rowView["KPNum"]; if (kpNum > 0) { frmItemInfo.txtInCnlKPNum.Text = kpNum.ToString(); frmItemInfo.txtInCnlKPName.Text = GetKPName(kpNum, tblKP); } } } catch (Exception ex) { ScadaUiUtils.ShowError(AppPhrases.GetInCnlError + ":\n" + ex.Message); } } // получение информации о канале управления if (item.CtrlCnlNum > 0) { string ctrlCnlNumStr = item.CtrlCnlNum.ToString(); frmItemInfo.txtCtrlCnlNum.Text = ctrlCnlNumStr; try { DataView view = new DataView(tblCtrlCnl); view.RowFilter = "CtrlCnlNum = " + ctrlCnlNumStr; if (view.Count > 0) { DataRowView rowView = view[0]; frmItemInfo.txtCtrlCnlName.Text = (string)rowView["Name"]; int objNum = (int)rowView["ObjNum"]; if (objNum > 0) { frmItemInfo.txtCtrlCnlObjNum.Text = objNum.ToString(); frmItemInfo.txtCtrlCnlObjName.Text = GetObjName(objNum, tblObj); } int kpNum = (int)rowView["KPNum"]; if (kpNum > 0) { frmItemInfo.txtCtrlCnlKPNum.Text = kpNum.ToString(); frmItemInfo.txtCtrlCnlKPName.Text = GetKPName(kpNum, tblKP); } } } catch (Exception ex) { ScadaUiUtils.ShowError(AppPhrases.GetCtrlCnlError + ":\n" + ex.Message); } } // отображение формы frmItemInfo.ShowDialog(); }
/// <summary> /// Writes the error to the log and displays a error message. /// </summary> public void ProcError(string message) { ErrLog.WriteError(message); ScadaUiUtils.ShowError(message); }
private void btnDelete_Click(object sender, EventArgs e) { // удаление набора или представления if (selViewSet == null && selViewInfo == null) { ScadaUiUtils.ShowError(AppPhrases.ChooseViewToDelete); } else { if (selViewInfo == null) { // удаление набора таблиц int ind = viewSettings.ViewSetList.IndexOf(selViewSet); viewSettings.ViewSetList.RemoveAt(ind); tvTableSets.Nodes.RemoveAt(ind); // определение выбранного набора таблиц if (--ind < 0) { ind = 0; } if (ind < viewSettings.ViewSetList.Count) { selViewSet = viewSettings.ViewSetList[ind]; tvTableSets.SelectedNode = tvTableSets.Nodes[ind]; } else { selViewSet = null; tvTableSets.SelectedNode = null; txtName.Text = ""; txtName.Enabled = false; lblDir.Visible = true; lblFile.Visible = false; txtDirOrFile.Text = ""; txtDirOrFile.Enabled = false; btnSelectView.Visible = false; } } else { // удаление представления int tableInd = selViewSet.Items.IndexOf(selViewInfo); selViewSet.Items.RemoveAt(tableInd); int tableSetInd = viewSettings.ViewSetList.IndexOf(selViewSet); TreeNode nodeTableSet = tvTableSets.Nodes[tableSetInd]; nodeTableSet.Nodes.RemoveAt(tableInd); // определение выбранного представления if (--tableInd < 0) { tableInd = 0; } if (tableInd < selViewSet.Count) { selViewInfo = selViewSet[tableInd]; tvTableSets.SelectedNode = nodeTableSet.Nodes[tableInd]; } else { selViewInfo = null; tvTableSets.SelectedNode = nodeTableSet; } } viewSets_Changed(); } }
/// <summary> /// Обработать ошибку, записав информацию в журнал и отобразив сообщение /// </summary> public static void ProcError(string message) { AppData.ErrLog.WriteAction(message, Log.ActTypes.Exception); ScadaUiUtils.ShowError(message); }
private void btnSelectView_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.OK) { // определение наименования, имени файла и типа представления string fname = openFileDialog.FileName; string ext = Path.GetExtension(fname); string viewFile = ""; string viewTitle = ""; int viewTypeInd = 0; if (ext == ".tbl" || ext == ".ofm" || ext == ".sch" || ext == ".fcs") { string dir = selViewSet == null ? "" : ScadaUtils.NormalDir(selViewSet.Directory); int pos = dir == "" ? -1 : fname.IndexOf(dir); viewFile = pos >= 0 ? fname.Substring(pos + dir.Length) : Path.GetFileName(fname); if (ext == ".sch") { viewTypeInd = 1; } else if (ext == ".fcs") { viewTypeInd = 2; } try { using (StreamReader reader = new StreamReader(fname, Encoding.Default)) { if (ext == ".ofm") { string line = reader.ReadLine(); pos = line.IndexOf(": "); viewTitle = pos >= 0 ? line.Substring(pos + 2) : line; } else { reader.ReadLine(); string line = reader.ReadLine(); pos = line.IndexOf("title=\""); if (pos >= 0) { int quotPos = line.LastIndexOf("\""); viewTitle = line.Substring(pos + 7, quotPos - pos - 7); } } } } catch (Exception ex) { ScadaUiUtils.ShowError(AppPhrases.ParseViewTitleError + ":\n" + ex.Message); } } else if (ext == ".aspx" || ext == ".htm" || ext == ".html") { int pos = webAppDir == "" ? -1 : fname.IndexOf(webAppDir); viewFile = pos >= 0 ? fname.Substring(pos + webAppDir.Length).Replace('\\', '/') : fname; viewTypeInd = 3; } txtDirOrFile.Text = viewFile; txtName.Text = viewTitle; cbType.SelectedIndex = viewTypeInd; } }
private void btnClone_Click(object sender, EventArgs e) { // getting the type of data being cloned bool cloneInCnls = rbInCnls.Checked; try { // getting cloned channels string fieldName = cloneInCnls ? "CnlNum" : "CtrlCnlNum"; var table = cloneInCnls ? Tables.GetInCnlTable() : Tables.GetCtrlCnlTable(); table.DefaultView.RowFilter = numStartNum.Text + " <= " + fieldName + " and " + fieldName + " <= " + numFinalNum.Text; var rows = new List <DataRow>(); // cloning strings for (var i = 0; i < table.DefaultView.Count; i++) { rows.Add(table.DefaultView[i].Row); } // cloning int shift = Convert.ToInt32(numNewStartNum.Value - numStartNum.Value); var newObjNum = cbObj.SelectedValue; var newKPNum = cbKP.SelectedValue; bool objNumChanged = newObjNum == DBNull.Value || (int)newObjNum > 0; bool kpNumChanged = newKPNum == DBNull.Value || (int)newKPNum > 0; foreach (var row in rows) { var newRow = table.NewRow(); newRow.ItemArray = row.ItemArray; newRow[0] = (int)newRow[0] + shift; if (objNumChanged) { newRow["ObjNum"] = newObjNum; } if (kpNumChanged) { newRow["KPNum"] = newKPNum; } table.Rows.Add(newRow); } // storing information in the database var updRows = 0; try { var adapter = table.ExtendedProperties["DataAdapter"] as SqlCeDataAdapter; adapter.ContinueUpdateOnError = false; updRows = adapter.Update(table); string infoMsg = (cloneInCnls ? AppPhrases.CloneInCnlsCompleted : AppPhrases.CloneCtrlCnlsCompleted) + "\r\n" + string.Format(AppPhrases.AddedCnlsCount, updRows); ScadaUiUtils.ShowInfo(updRows > 0 ? infoMsg + AppPhrases.RefreshRequired : infoMsg); } catch (Exception ex) { // determining the number of the channel on which the error occurred int cnlNum = -1; if (table.HasErrors) { try { cnlNum = (int)table.GetErrors()[0][fieldName] - shift; } catch { // ignored } } // generating and displaying an error message string errMsg = (cloneInCnls ? AppPhrases.CloneInCnlsError : AppPhrases.CloneCtrlCnlsError) + ".\r\n" + string.Format(AppPhrases.AddedCnlsCount, updRows) + "\r\n" + (cnlNum < 0 ? CommonPhrases.ErrorWithColon : string.Format(AppPhrases.CloneCnlError, cnlNum)) + "\r\n" + Tables.TranslateErrorMessage(ex.Message, table); AppData.ErrLog.WriteAction(errMsg, Log.ActTypes.Exception); ScadaUiUtils.ShowError(updRows > 0 ? errMsg + AppPhrases.RefreshRequired : errMsg); } } catch (Exception ex) { AppUtils.ProcError((cloneInCnls ? AppPhrases.CloneInCnlsError : AppPhrases.CloneCtrlCnlsError) + ":\r\n" + ex.Message); } }
private void treeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { // получение изменений после завершения редактирования узла if (e.Label != null /*редактирование отменено*/) { AddressBook.AddressBookItem bookItem = e.Node.Tag as AddressBook.AddressBookItem; if (bookItem != null) { string oldVal = bookItem.Value; string newVal = e.Label; if (newVal == "") { e.CancelEdit = true; ScadaUiUtils.ShowError(AbPhrases.EmptyValueNotAllowed); e.Node.BeginEdit(); } else if (!oldVal.Equals(newVal, StringComparison.Ordinal)) { // установка нового значения bookItem.Value = newVal; // определение нового индекса узла, чтобы сохранить упорядоченность, и проверка значения IList list = bookItem.Parent.Children; int curInd = e.Node.Index; int newInd = curInd; bool duplicated; string errMsg = ""; if (bookItem is AddressBook.ContactGroup) { newInd = FindInsertIndex <AddressBook.ContactGroup>( (List <AddressBook.ContactGroup>)list, curInd, out duplicated); if (duplicated) { errMsg = AbPhrases.ContactGroupExists; } } else if (bookItem is AddressBook.Contact) { newInd = FindInsertIndex <AddressBook.Contact>( (List <AddressBook.Contact>)list, curInd, out duplicated); if (duplicated) { errMsg = AbPhrases.ContactExists; } } else if (bookItem is AddressBook.ContactRecord) { newInd = FindInsertIndex <AddressBook.ContactRecord>( (List <AddressBook.ContactRecord>)list, curInd, out duplicated); if (bookItem is AddressBook.PhoneNumber) { if (duplicated) { errMsg = AbPhrases.PhoneNumberExists; } } else { if (duplicated) { errMsg = AbPhrases.EmailExists; } if (!CheckEmail(newVal)) { errMsg = AbPhrases.IncorrectEmail; } } } if (errMsg != "") { // возврат старого значения bookItem.Value = newVal; e.CancelEdit = true; ScadaUiUtils.ShowError(errMsg); e.Node.BeginEdit(); } else if (newInd != curInd) { // перемещение узла, чтобы сохранить упорядоченность BeginInvoke(new Action(() => { treeView.MoveSelectedNode(newInd); })); } Modified = true; } } } }
private void treeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { // receiving changes after the node has been edited if (e.Label != null /*editing canceled*/) { var bookItem = e.Node.Tag as AddressBook.AddressBookItem; if (bookItem != null) { string oldVal = bookItem.Value; string newVal = e.Label; if (newVal == "") { e.CancelEdit = true; ScadaUiUtils.ShowError(AbPhrases.EmptyValueNotAllowed); e.Node.BeginEdit(); } else if (!oldVal.Equals(newVal, StringComparison.Ordinal)) { // setting a new value bookItem.Value = newVal; // defining a new node index to keep order, and checking the value IList list = bookItem.Parent.Children; int curInd = e.Node.Index; int newInd = curInd; bool duplicated; var errMsg = ""; if (bookItem is AddressBook.ContactGroup) { newInd = FindInsertIndex <AddressBook.ContactGroup>( (List <AddressBook.ContactGroup>)list, curInd, out duplicated); if (duplicated) { errMsg = AbPhrases.ContactGroupExists; } } else if (bookItem is AddressBook.Contact) { newInd = FindInsertIndex <AddressBook.Contact>( (List <AddressBook.Contact>)list, curInd, out duplicated); if (duplicated) { errMsg = AbPhrases.ContactExists; } } else if (bookItem is AddressBook.ContactRecord) { newInd = FindInsertIndex <AddressBook.ContactRecord>( (List <AddressBook.ContactRecord>)list, curInd, out duplicated); if (bookItem is AddressBook.PhoneNumber) { if (duplicated) { errMsg = AbPhrases.PhoneNumberExists; } } else { if (duplicated) { errMsg = AbPhrases.EmailExists; } if (!CheckEmail(newVal)) { errMsg = AbPhrases.IncorrectEmail; } } } if (errMsg != "") { // returning the old value bookItem.Value = newVal; e.CancelEdit = true; ScadaUiUtils.ShowError(errMsg); e.Node.BeginEdit(); } else if (newInd != curInd) { // moving the node to keep order BeginInvoke(new Action(() => { treeView.MoveSelectedNode(newInd); })); } Modified = true; } } } }