大家好,
这是我的第一篇文章,到目前为止我不需要问任何问题,因为你已经问了我所有的问题
我已经使用用户控件创建了一个自定义调色板,我正在将带有属性的块放在绘图中。我有大约100个不同的属性值,它们都按6个组合框排序。
- public void insBlok(string code)
- {
- Document doc = AcAp.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- Utils.SetFocusToDwgView();
- Point3d ptPoint = new Point3d(0, 0, 0);
- try
- {
- while (ptPoint != null)
- {
- PromptPointResult pPtRes;
- PromptPointOptions pPtOpts = new PromptPointOptions("");
- pPtOpts.AllowNone = true;
- pPtOpts.Message = "\nSelect point: ";
- pPtRes = doc.Editor.GetPoint(pPtOpts);
- if (pPtRes.Status == PromptStatus.None || pPtRes.Status == PromptStatus.Cancel || pPtRes.Status == PromptStatus.Error)
- {
- return;
- }
- ptPoint = pPtRes.Value;
- using (DocumentLock loc = doc.LockDocument())
- {
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- ...................
- using (BlockReference blockRef = new BlockReference(ptPoint, btr.ObjectId))
- {
-
- foreach (ObjectId id in btr)
- {
- //insert value in attribute,
- }
- }
- tr.Commit();
- }
- }
- }
- }
- catch (System.Exception x)
- {
- ed.WriteMessage("\nError: " + x.Message);
- }
- finally
- {
- ed.WriteMessage("\n");
- }
- }
这是按钮单击的代码:
- private void cboBtn_ButtonClick(object sender, EventArgs e)
- {
- string buttonText = ((ComboBox1)sender).Text;
- buttonText = buttonText.Substring(0, 3);
- insBlok(buttonText);
- }
当我单击按钮时,所有东西都作为sholud工作,但是当我从ComboBox中选择不同的属性并再次单击按钮(没有以Enter或Esc结束第一个命令)时,相同的命令又一次触发,这次嵌套在以前的事务中。结束第二个命令后,第一个命令处于活动状态。
我可以创建
bool
active_command,但还有另一个具有相似代码的用户表单(具有不同属性值的不同块),因此我能够更改调色板,选择属性值,单击该用户表单上的按钮,插入该块,然后第一个命令处于活动状态。
命令没有
命令方法
辅助程序,只能从自定义调色板调用它。
现在怎么办?我可以删除whilw循环,但用户必须每次单击按钮。使用命令方法atrelte我应该有100个命令(这不仅是Autocad的附加命令)。SendCommand^C^C不是一个选项,我认为......
本帖以下内容被隐藏保护;需要你回复后,才能看到! 游客,如果您要查看本帖隐藏内容请 回复 |