明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1289|回复: 1

[求助贴]代码出现以下错误提示要求对象引用!

[复制链接]
发表于 2012-6-2 19:00:04 | 显示全部楼层 |阅读模式
错误提示:非静态的字段、方法或属性“Lab3.jshqCommands.CreateEmployeeDefinition()”要求对象引用。
希望好心人帮我看一下,谢谢了。代码如下:
  1. using System ;
  2. using Autodesk.AutoCAD.Runtime ;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.Colors;
  6. using Autodesk.AutoCAD.EditorInput;

  7. [assembly: CommandClass(typeof(ClassLibrary.Class))]

  8. namespace ClassLibrary
  9. {
  10.   /// <summary>
  11.   /// Summary description for Class.
  12.   /// </summary>
  13.   public class Class
  14.   {
  15.     public Class()
  16.     {
  17.       //
  18.       // TODO: Add constructor logic here
  19.       //
  20.     }
  21.     //This function returns the ObjectId for the BlockTableRecord called "EmployeeBlock",
  22.     //creating it if necessary.  The block contains three entities - circle, text
  23.     //and ellipse.
  24.     public ObjectId CreateEmployeeDefinition()
  25.     {
  26.       ObjectId newBtrId = new ObjectId(); //The return value for this function
  27.       Database db = HostApplicationServices.WorkingDatabase; //save some space

  28.             // The "using" keyword used below automatically calls "Dispose"
  29.             // on the "trans" object.
  30.             using (Transaction trans = db.TransactionManager.StartTransaction())
  31.             {
  32.                 //Now, drill into the database and obtain a reference to the BlockTable
  33.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
  34.                 if ((bt.Has("EmployeeBlock")))
  35.                 {
  36.                     newBtrId = bt["EmployeeBlock"];
  37.                 }
  38.                 else
  39.                 {
  40.                     Point3d center = new Point3d(10, 10, 0); // convenient declaration...
  41.                     //  Declare and define the entities we want to add:
  42.                     //Circle:
  43.                     Circle circle = new Circle(center, Vector3d.ZAxis, 2);
  44.                     //Text:
  45.                     MText text = new MText();
  46.                     text.Contents = "Earnest Shackleton";
  47.                     text.Location = center;
  48.                     //Ellipse:
  49.                     Ellipse ellipse = new Ellipse(center, Vector3d.ZAxis, new Vector3d(3, 0, 0), 0.5, 0, 0);
  50.                     
  51.                     //Next, create a layer with the helper function, and assign
  52.                     //the layer to our entities.
  53.                     ObjectId empId = CreateLayer();
  54.                     text.LayerId = empId;
  55.                     circle.LayerId = empId;
  56.                     ellipse.LayerId = empId;
  57.                     //Set the color for each entity irrespective of the layer's color.
  58.                     text.ColorIndex = 2;
  59.                     circle.ColorIndex = 1;
  60.                     ellipse.ColorIndex = 3;

  61.                     //Create a new block definition called EmployeeBlock
  62.                     BlockTableRecord newBtr = new BlockTableRecord();
  63.                     newBtr.Name = "EmployeeBlock";
  64.                     newBtrId = bt.Add(newBtr); //Add the block, and set the id as the return value of our function
  65.                     trans.AddNewlyCreatedDBObject(newBtr, true); //Let the transaction know about any object/entity you add to the database!

  66.                     newBtr.AppendEntity(circle); //Append our entities...
  67.                     newBtr.AppendEntity(text);
  68.                     newBtr.AppendEntity(ellipse);
  69.                     trans.AddNewlyCreatedDBObject(circle, true); //Again, let the transaction know about our newly added entities.
  70.                     trans.AddNewlyCreatedDBObject(text, true);
  71.                     trans.AddNewlyCreatedDBObject(ellipse, true);
  72.                 }
  73.                 trans.Commit(); //All done, no errors?  Go ahead and commit!
  74.             }
  75.       return newBtrId;
  76.     }
  77.    

  78.     //This function creates a new BlockReference to the "EmployeeBlock" object,
  79.     //and adds it to ModelSpace.
  80.     [CommandMethod("CREATE")]
  81.     public void CreateEmployee()
  82.     {
  83.       Database db = HostApplicationServices.WorkingDatabase;
  84.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

  85.             // The try/finally idiom is another approach for using, commiting
  86.             // and disposing of transactions.  This technique is demonstrated once here.
  87.             // However, the 'Using' approach will be used from here on.
  88.             
  89.             Transaction trans = db.TransactionManager.StartTransaction();
  90.             try
  91.       {
  92.         BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
  93.         BlockTableRecord btr =(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  94.         //Create the block reference...use the return from CreateEmployeeDefinition directly!
  95.         BlockReference br = new BlockReference(new Point3d(10, 10, 0), CreateEmployeeDefinition());
  96.         btr.AppendEntity(br); //Add the reference to ModelSpace
  97.         trans.AddNewlyCreatedDBObject(br, true); //Let the transaction know about it
  98.         trans.Commit(); // Commit is always required to indicate success.
  99.       }
  100.             catch (System.Exception ex)
  101.             {
  102.                 // The calling, top-level method (such as this) should be used
  103.                 // to report errors that occur even in called methods.
  104.                 ed.WriteMessage("Error Creating Employee Block: " + ex.Message);
  105.             }
  106.             finally
  107.       {
  108.         trans.Dispose(); // Manual cleanup necessary in this transaction model
  109.       }
  110.     }
  111.         // This function returns the objectId for the "EmployeeLayer", creating it if necessary.
  112.         private ObjectId CreateLayer()
  113.         {
  114.             ObjectId layerId;
  115.             Database db = HostApplicationServices.WorkingDatabase;
  116.             using (Transaction trans = db.TransactionManager.StartTransaction())
  117.             {
  118.                 // open the layer table for read first, to check to see if the requested layer exists
  119.                 LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);
  120.                 // Check if EmployeeLayer exists...
  121.                 if (lt.Has("EmployeeLayer"))
  122.                 {
  123.                     layerId = lt["EmployeeLayer"];
  124.                 }
  125.                 else
  126.                 {
  127.                     // if not, create the layer here.
  128.                     LayerTableRecord ltr = new LayerTableRecord();
  129.                     ltr.Name = "EmployeeLayer"; // Set the layer name
  130.                     ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2);
  131.                     // upgrade the open from read to write
  132.                     lt.UpgradeOpen();
  133.                     // now add the new layer
  134.                     layerId = lt.Add(ltr);
  135.                     trans.AddNewlyCreatedDBObject(ltr, true);
  136.                     trans.Commit(); // Only need to commit when we have made a change!
  137.                 }
  138.             }
  139.             return layerId;
  140.         }
  141.       
  142.         
  143.   }
  144. }


 楼主| 发表于 2012-6-2 19:12:15 | 显示全部楼层
知道了,把两个方法都换成static的就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 17:35 , Processed in 0.182961 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表