| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 928 人关注过本帖
标题:求助:c#与AutoCad2004问题
只看楼主 加入收藏
雪域藏金
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求助:c#与AutoCad2004问题
以下代码是在AUTOCAD2004下的VBA代码

''''''选择集
Public Sub MySelet()
  Dim FilterType(0) As Integer
  Dim FilterData(0) As Variant

 
  Dim Mssname As String
  Mssname = "temp"
  Dim sset As AcadSelectionSet
  
   On Error Resume Next
   
  Set sset = ThisDrawing.SelectionSets.Add(Mssname)
  If Err Then
    Set sset = ThisDrawing.SelectionSets.Item(Mssname)
  End If
  On Error GoTo 0
  
  FilterType(0) = 0: FilterData(0) = "LWPOLYLINE"
  sset.Clear
  

  sset.SelectOnScreen FilterType, FilterData
  
  If sset.Count > 0 Then
    Set Ment = sset(0)
    MsgBox "选择线:" & sset.Count & "条"
  Else
    MsgBox "没有选线"
  End If
End Sub


 

 

下面是C#中实现类似功能的代码:

using System;
using System.Collections.Generic;
using System.Text;
using AutoCAD;
using System.Runtime.InteropServices;

using System.Windows.Forms;

 

namespace ZZXACAD
{
    public class MyAcad
    {
        const string progID = "AutoCAD.Application.16";

        AcadApplication acApp;

        AcadDocument acDoc = null;

        private string acadFile;


 

 

    public int MySelet(string sName)
        {
            int []  FilterType = new int[1] { 0 };
            object[] FilterData = new object[1] { "LWPOLYLINE" };

            

            AcadSelectionSet sset = null;
            try
            {

                sset = acDoc.SelectionSets.Add(sName);
            }
            catch
            {
                sset = acDoc.SelectionSets.Item(sName);
            }


            sset.Clear();

   


            try
            {
                sset.SelectOnScreen((object)FilterType, (object)FilterData);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "errr");
            }
            return sset.Count;
        }
    }

 

}

}

 

 

C#代码“sset.SelectOnScreen((object)FilterType, (object)FilterData);”为什么总出现错误:参数FilterType(位于SelectOnScreen中)无效。”

恳请请大侠们指点迷经!

2011-12-16 22:39
雪域藏金
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-16
收藏
得分:0 
恳请大侠们帮助!
2011-12-17 19:37
樾宝
Rank: 3Rank: 3
来 自:常德
等 级:论坛游侠
帖 子:72
专家分:147
注 册:2011-8-19
收藏
得分:10 
神马东东,姐会点小C,会点模具。
  你写的啥子意思吗?
2011-12-18 11:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
顯然跟訪問權有關,FilterType是私有變量,你把它傳到另一個模塊,在哪裏,它可能會被修改,編譯器可能檢查到了類似代碼。

另外,object是C#中一切對象的根類,無需強制轉換為object。你升級為object之後傳過去,如果在那邊用到子類的方法,是object沒有的,那麽就會報這個錯誤。


[ 本帖最后由 TonyDeng 于 2011-12-18 13:34 编辑 ]

授人以渔,不授人以鱼。
2011-12-18 13:30
雪域藏金
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-16
收藏
得分:0 
回复 3楼 樾宝
多谢关注,本问题是在AutoCad系统二次开发中遇到的,前面是用Vba编写的,程序运行正常,目的只是创建一个选择集。后一段代码是在C#(2008)下写的,也是想建立同样的选择集,只是函数传递上出了问题,不知道怎么修改代码,实现此功能。恳请大侠们帮助了!
2011-12-18 18:33
雪域藏金
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-12-16
收藏
得分:0 
回复 4楼 TonyDeng
多谢指点!由于本人才学C#,不知道这段代码应该怎样修改,还请多帮助.
2011-12-18 18:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不大清楚這個程序的原理想幹什麽,是不是想做動態數組呀?先把那兩個強制轉換刪掉看看。

授人以渔,不授人以鱼。
2011-12-18 23:31
快速回复:求助:c#与AutoCad2004问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041811 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved