/// <summary> /// Отобразить свойства элемента /// </summary> private void ShowElemProps(ElemInfo elemInfo) { procChangedEv = false; gbElemGroup.Visible = false; gbElem.Visible = true; gbCmd.Visible = false; if (elemInfo == null) { txtElemName.Text = ""; txtElemAddress.Text = ""; txtElemSignal.Text = ""; rbBool.Checked = true; gbElem.Enabled = false; } else { txtElemName.Text = elemInfo.Elem.Name; txtElemAddress.Text = elemInfo.AddressRange; txtElemSignal.Text = elemInfo.Signal.ToString(); Modbus.ElemTypes elemType = elemInfo.Elem.ElemType; rbUShort.Enabled = rbShort.Enabled = rbUInt.Enabled = rbInt.Enabled = rbFloat.Enabled = elemType != Modbus.ElemTypes.Bool; rbBool.Enabled = elemType == Modbus.ElemTypes.Bool; switch (elemType) { case Modbus.ElemTypes.UShort: rbUShort.Checked = true; break; case Modbus.ElemTypes.Short: rbShort.Checked = true; break; case Modbus.ElemTypes.UInt: rbUInt.Checked = true; break; case Modbus.ElemTypes.Int: rbInt.Checked = true; break; case Modbus.ElemTypes.Float: rbFloat.Checked = true; break; default: rbBool.Checked = true; break; } gbElem.Enabled = true; } procChangedEv = true; }
private void numGrElemCnt_ValueChanged(object sender, EventArgs e) { // изменение количества элементов в группе if (procChangedEv && selElemGroup != null) { treeView.BeginUpdate(); int elemCnt = selElemGroup.Elems.Count; int newElemCnt = (int)numGrElemCnt.Value; if (elemCnt < newElemCnt) { // добавление новых элементов Modbus.ElemTypes elemType = selElemGroup.DefElemType; ushort elemLen = (ushort)Modbus.Elem.GetElemLength(elemType); ushort elemAddr = selElemGroup.Address; for (int elemInd = 0; elemInd < newElemCnt; elemInd++) { if (elemInd < elemCnt) { elemAddr += (ushort)selElemGroup.Elems[elemInd].Length; } else { ElemInfo elemInfo = new ElemInfo(); elemInfo.Elem = new Modbus.Elem() { ElemType = elemType }; elemInfo.Address = elemAddr; elemInfo.ElemGroup = selElemGroup; selElemGroup.Elems.Add(elemInfo.Elem); selNode.Nodes.Add(NewElemNode(elemInfo)); elemAddr += elemLen; } } } else if (elemCnt > newElemCnt) { // удаление лишних элементов for (int i = newElemCnt; i < elemCnt; i++) { selElemGroup.Elems.RemoveAt(newElemCnt); selNode.Nodes.RemoveAt(newElemCnt); } } UpdateSignals(selNode); Modified = true; treeView.EndUpdate(); } }
private void cbGrTableType_SelectedIndexChanged(object sender, EventArgs e) { // изменение типа таблицы данных группы элементов if (procChangedEv && selElemGroup != null) { Modbus.TableTypes tableType = (Modbus.TableTypes)cbGrTableType.SelectedIndex; int maxElemCnt = Modbus.ElemGroup.GetMaxElemCnt(tableType); bool cancel = selElemGroup.Elems.Count > maxElemCnt && MessageBox.Show(string.Format(KpPhrases.ElemRemoveWarning, maxElemCnt), CommonPhrases.QuestionCaption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes; if (cancel) { procChangedEv = false; cbGrTableType.SelectedIndex = (int)selElemGroup.TableType; procChangedEv = true; } else { // ограничение макс. количества элементов в группе if (numGrElemCnt.Value > maxElemCnt) { numGrElemCnt.Value = maxElemCnt; } numGrElemCnt.Maximum = maxElemCnt; // установка типа таблицы данных selElemGroup.TableType = tableType; // установка типа элементов группы по умолчанию Modbus.ElemTypes elemType = selElemGroup.DefElemType; foreach (Modbus.Elem elem in selElemGroup.Elems) { elem.ElemType = elemType; } // обновление узлов дерева UpdateElemGroupNode(); UpdateElemNodes(); Modified = true; } } }