Bentley二次开发教程28-交互窗口-案例实战2-EC属性赋值工具

embedded/2024/9/25 5:48:25/

EC属性赋值工具

该工具会根据用户输入的路径获取Schema文件的路径,然后通过路径读取对应的Schema文件并在树状图中显示EC类,当用户选择树状图上的节点时,此时会触发事件,根据EC属性添加用户自定义控件用于显示EC属性并可对其进行赋值操作。完成后选取元素,点击界面上的应用,此时元素会被赋予指定EC类,同时修改的EC属性值也会被同步赋予。
该工具涉及到的WinForm控件有:TextBox,Button,TreeView,Panel,UserControl(用户自定义控件)。
在这里插入图片描述
在这里插入图片描述

using Bentley.DgnPlatformNET;}                 instance.WriteChanges();//更新文件上的EC实例}                                                 }private void AddECPropItems(TreeNodeMouseClickEventArgs e){m_proppanel_ECProp.Controls.Clear();//清空面板中的用户控件IECClass eCs = m_ecschema.GetClass(e.Node.Name);//使用树状图中的节点名称从ECSchema中获取EC类IEnumerable<IECProperty> props = eCs.Properties(true);//获得EC类中的EC属性int j = 0;//声明int值用于控制用户控件的间距foreach (IECProperty prop in props)//遍历EC类中的EC属性{ECItem item = new ECItem();//声明用于显示EC属性及值的用户控件item.label1.Text = prop.Name;//设置用户控件中的标签名称为EC属性名称item.textBox1.Tag = prop.Type.Name;//设置用户控件中的文本框的标签为EC属性类型switch (prop.Type.Name)//选择EC属性值{case "int"://若EC属性为intbreak;//跳出case "string"://若EC属性为stringbreak;//跳出default://其余情况item.textBox1.Enabled = false;//锁定文本框,不允许用户输入数据break;//跳出}item.Top = 28 * j;//设置用户控件位置item.Parent = m_proppanel_ECProp;//确定控件依赖的面板j++;//增加int值}m_proppanel_ECProp.AutoScroll = true;//启动面板自动滚动m_proppanel_ECProp.Show();//显示面板}private void CreateTreeView(){IECClass[]classes= m_ecschema.GetClasses();//获得ECSchema中的所有EC类            for(int i=0;i<classes.Count();i++)//遍历EC类{TreeNode ti = new TreeNode();//创建树状图节点ti.Name = classes[i].Name;//设置树状图节点的名称的EC类名ti.Text = classes[i].Name;//设置树状图节点的文字的EC类名m_treeView_ECClass.Nodes.Add(ti);//在树状图中添加节点                }m_treeView_ECClass.ExpandAll();//展开树状图}private void SelectSchemaFilePath(){OpenFileDialog dialog = new OpenFileDialog();//声明文件对话框dialog.Filter = "*.ecschema.xml|*.ecschema.XML";//设置文件选取过滤器为识别后缀.ecschema.xml的文件dialog.FilterIndex = 1;//设置过滤器索引if (dialog.ShowDialog() == DialogResult.OK)//判断是否成功输入{this.m_textBox_import.Text = dialog.FileName;//设置文本框中的文字为文件路径}}private void LoadSchemaData(){XmlDocument xmldoc = new XmlDocument();//声明XML文件浏览器xmldoc.Load(m_textBox_import.Text);//读取指定路径的xml文件string xmlStr = xmldoc.InnerXml;//获得读取到的文字内容ECSchemaXmlStringReader xmlReader = new ECSchemaXmlStringReader(xmlStr);//声明ECSchema阅读器m_ecschema = xmlReader.Deserialize();//将EC Schema阅读器读取到的信息反序列化if (null == m_ecschema)//判断是否成功获得ECSchema{MessageBox.Show("Schema not found, please check");//对话框输出未获得指定ECSchemareturn;//返回}ImportSchemaOptions options = new ImportSchemaOptions();//声明导入Schema选项              DgnECManager.Manager.ImportSchema(m_ecschema, m_dgnFile, options);//导入ECSchemareturn;//返回}       }
}
namespace WinformUIIntroduction.UI// this.m_proppanel_ECProp.Location = new System.Drawing.Point(187, 42);this.m_proppanel_ECProp.Name = "m_proppanel_ECProp";this.m_proppanel_ECProp.Size = new System.Drawing.Size(336, 206);this.m_proppanel_ECProp.TabIndex = 4;// // ECAttachMenu// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(538, 289);this.Controls.Add(this.m_proppanel_ECProp);this.Controls.Add(this.m_textBox_import);this.Controls.Add(this.m_button_apply);this.Controls.Add(this.m_button_import);this.Controls.Add(this.m_treeView_ECClass);this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;this.MaximizeBox = false;this.Name = "ECAttachMenu";this.ShowIcon = false;this.Text = "ECAttachTool";this.TopMost = true;this.ResumeLayout(false);this.PerformLayout();}#endregionprivate System.Windows.Forms.TreeView m_treeView_ECClass;private System.Windows.Forms.Button m_button_import;private System.Windows.Forms.Button m_button_apply;private System.Windows.Forms.TextBox m_textBox_import;private System.Windows.Forms.Panel m_proppanel_ECProp;}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WinformUIIntroduction.UI
{public partial class ECItem : UserControl{public ECItem(){InitializeComponent();       }        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)//在文本框中点击按键时触发{switch (textBox1.Tag)//根据文本框的标签进行设置{case "int"://当文本框的标签设置为"int"if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar))//只允许在文本框中输入数组与回退{e.Handled = true;//返回真}break;//跳出case "string"://当文本框的标签设置为"string"break;//跳出}            }       }
}

在这里插入图片描述


http://www.ppmy.cn/embedded/22999.html

相关文章

购买 DDoS 高防 IP 防护哪家好?

DDoS 高防 IP 哪里买会比较好?在这场攻与守的游戏里&#xff0c;DDoS 高防 IP 是一种针对 DDoS 攻击的防护措施&#xff0c;通过将网站或应用的 IP 地址映射到高防 IP 上&#xff0c;实现对流量的清洗和过滤&#xff0c;从而有效抵御 DDoS 攻击。在选择 DDoS 高防 IP 服务提供…

【Java】java实现文件上传和下载(上传到指定路径/数据库/minio)

目录 上传到指定路径 一、代码层级结构 二、文件上传接口 三、使用postman进行测试&#xff1b; MultipartFile接收前端传递的文件&#xff1a;127.0.0.1:8082/path/uploadFile part接收前端传递的文件&#xff1a;127.0.0.1:8082/path/uploadFileByRequest 接收前端传递…

近期金价大跌了!现货黄金投资吗?

受美联储降息预期以及中东地缘局势的影响&#xff0c;现货黄金价格在今年不断上涨&#xff0c;屡次刷新历史新高。在这样好的行情背景下&#xff0c;还是有人会问&#xff0c;涨得这么高的金价会不会回调&#xff1f;现在现货黄金值得投资吗&#xff1f;这些问题值得我们去思考…

Kafka Exactly Once 语义实现原理:幂等性与事务消息

01 前言 在现代分布式系统中&#xff0c;确保数据处理的准确性和一致性是至关重要的。Apache Kafka&#xff0c;作为一个广泛使用的流处理平台&#xff0c;提供了强大的消息队列和流处理功能。随着业务需求的增长&#xff0c;Kafka 的事务消息功能应运而生&#xff0c;它允许应…

Nginx+Lua+OpenResty(详解及使用)

一、 Nginx简介 Nginx是一个高性能的Web服务器和反向代理的软件。 Web服务器&#xff1a;就是运行我们web服务的容器&#xff0c;提供web功能&#xff0c;还有tomcat也提供类似的功能。 代理是软件架构和网络设计中&#xff0c;非常重要的一个概念。 二、Nginx的反向代理&…

Java安全之Mojarra JSF反序列化

JavaServer Faces&#xff0c;新一代的Java Web应用技术标准&#xff0c;吸收了很多Java Servlet以及其他的Web应用框架的特性。JSF为Web应用开发定义了一个事件驱动的、基于组件的模型。 其中常用的是Sun&#xff08;现在的Oracle&#xff09;发布的Mojarra和Apache发布的MyF…

【紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第三章)键控流水灯实验例程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 适用于板卡型号&#xff1a; 紫光同创PG2L50H_MBG324开发平台&#xff08;盘古PGX-Nano&#xff09; 一&#xff1a;…

【stomp 实战】spring websocket源码分析之握手请求的处理

上一节【搭建一套websocket推送平台】我们通过一个项目&#xff0c;实现了一套推送平台。由于spring框架对于websocket的支持和stomp协议的良好封装&#xff0c;我们很容易地就实现了websocket的消息推送功能。虽然搭建这么一套推送系统不难&#xff0c;但是如果不了解其底层原…