Lukas00990 2021-09-16 06:32 采纳率: 42.9%
浏览 101
已结题

C# var 的用法,获取指定位置的value和type,重写C#

原代码是这样写的,

var current = ProjectTree.SelectedItem.Tag;

其中 current代表

img

ProjectTree代表

img

SelectedItem代表

img

Tag代表

img

我理解的是ProjectTree.SelectedItem.Tag是在GUI界面中指定位置所表示的类。

我debug了下,我选中了某个指定位置,

img

这个是current的值

img

可以看到, current的value是{Siemens.Engineering.SW.Blocks.PlcBlockSystemGroup}, type是 object{Siemens.Engineering.SW.Blocks.PlcBlockSystemGroup}

{Siemens.Engineering.SW.Blocks.PlcBlockSystemGroup}这个的定义如下

img

目前我想要实现的是重新写current 这个var,不通过选择GUI界面中指定位置,而是通过代码实现。
我试了这个代码,但是报错,
PlcSystemBlockGroup current = new PlcSystemBlockGroup();

img

如何才能通过写代码的形式获得这个对应的current呢?

主要想用这一个函数, 先写调用指令

OpennessHelper.ImportItem(current as IEngineeringObject, file, ImportOptions.Override);


ImportItem函数如下:

public static void ImportItem(IEngineeringCompositionOrObject destination, string filePath, ImportOptions importOption)
        {
            if (destination == null)
                throw new ArgumentNullException(nameof(destination), "Parameter is null");
            if (string.IsNullOrEmpty(filePath))
                throw new ArgumentException("Parameter is null or empty", nameof(filePath));

            var fileInfo = new FileInfo(filePath);
            filePath = fileInfo.FullName;
            if (destination is CycleComposition || destination is ConnectionComposition || destination is MultiLingualGraphicComposition
                || destination is GraphicListComposition || destination is TextListComposition)
            {
                var parameter = new Dictionary<Type, object>();
                parameter.Add(typeof(string), filePath);
                parameter.Add(typeof(ImportOptions), importOption);
                // Export prüfen
                (destination as IEngineeringComposition).Invoke("Import", parameter);
            }
            //folder2

            //  (destination as PlcSoftware).TagTables.Import(fileInfo, importOption);

            else if (destination is PlcBlockGroup)
            {
                if (Path.GetExtension(filePath).Equals(".xml"))
                    (destination as PlcBlockGroup).Blocks.Import(fileInfo, importOption);
                else
                {
                    var currentDestination = destination as IEngineeringObject;
                    while (!(currentDestination is PlcSoftware))
                    {
                        currentDestination = currentDestination.Parent;
                    }
                    var col = (currentDestination as PlcSoftware).ExternalSourceGroup.ExternalSources;

                    var sourceName = Path.GetRandomFileName();
                    sourceName = Path.ChangeExtension(sourceName, ".src");
                    var src = col.CreateFromFile(sourceName, filePath);
                    src.GenerateBlocksFromSource();
                    src.Delete();
                }
            }


  • 写回答

3条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 9月24日
      • 已采纳回答 9月16日
      • 修改了问题 9月16日
      • 修改了问题 9月16日
      • 展开全部

      悬赏问题

      • ¥15 关于#C语言#的问题,如何解决?
      • ¥20 Vs2017 Help Viewer2.3 问题
      • ¥35 基于嵌入式linux的日程管理软件
      • ¥50 如何将list字符串添加到CSV文件表头?
      • ¥15 关于#javascript#的问题:通过ajax实现的局部刷新 如何将项目打包
      • ¥15 海思uboot USB3.0无法识别
      • ¥15 无法调用库文件,自己可以找到,但编译时显示没有
      • ¥15 安装PyQt5的时候这里创建虚拟环境是哪里?具体是怎么的?能录个视频吗
      • ¥20 php程序设计题不会!求解答!
      • ¥50 关于#python#的问题,如何解决?