乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 144|回复: 9

在布局上设置 TabOrder 时出现问题

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-5-26 00:11:50 | 显示全部楼层 |阅读模式
也许我不明白需要做些什么来重新排序布局,但我非常确定我正在做的事情不起作用....public void moveLayout(string name, bool up)。
{。
Document acDoc = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument;。
Database acDB = acDoc.Database;。
LayoutManager acLayoutMgr = LayoutManager.Current;。
using (acDoc.LockDocument())。
{。
using (Transaction acTrans = acDB.TransactionManager.StartTransaction())。
{。
如果(向上)。
((Layout)acTrans.GetObject(acLayoutMgr.GetLayoutId(name), OpenMode.ForWrite)).TabOrder -= 1;。
还。
((Layout)acTrans.GetObject(acLayoutMgr.GetLayoutId(name), OpenMode.ForWrite)).TabOrder += 1;。
acTrans.Commit();。
acDoc.Editor.Regen();。
}。
}。
}我确信它的基本的东西,我错过了...我似乎有一个森林/树木的时刻:-/。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2017-5-26 01:15:34 | 显示全部楼层

我不能抽出时间玩,但你
看过诺曼斯的博客文章
http://drive-cad-with-code.blogspot.com.au/2011/06/set-layout-in-order.html
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2017-5-26 11:21:42 | 显示全部楼层
在更改taborder之前,您必须使其成为当前的吗?
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-5-30 23:30:32 | 显示全部楼层

我看过那个帖子。如果我能确信它像宣传的那样有效,我不会反对做它所建议的事情。现在,我想在taborder中将一个标签向上或向下重新排序。
我确实有一个想法,我会尝试解决这个问题。
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2017-5-31 01:52:25 | 显示全部楼层

如果您尝试将3个连续的选项卡设置为Taborder 2会发生什么......这可能会告诉您您使用的代码失败的原因......
我开始思考您的问题和现实生活赶上了我,所以......
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2017-5-31 11:18:43 | 显示全部楼层

我看过那篇文章。如果我能保证它能像广告中所说的那样工作,我不会反对做它所建议的事情。现在,我想在taborder中向上或向下重新排序单个选项卡
我确实有一个想法,我将尝试看看解决问题的方法

既然我的一篇老文章已经提到了,让我插一句:
我认为你的代码不起作用的原因是你只是试图更改一个布局的TabOrder,但没有尝试更改受影响的布局(更改之前和/或之后的布局),这将导致重复的TabRoder,从而在事务提交时出现异常。如您所见,始终存在模型布局,它始终具有TabOrder=0。因此,不能向下移动TabOrder1=1的布局。如果布局具有最大选项卡顺序,则不能将其上移。因此,当您说“重新排序”布局选项卡时,它实际上是两个布局的交换选项卡顺序:目标布局和它前面的布局(只要它不是“模型”),或它后面的布局(如果它不是最后一个)
  1. public static void SwapLayoutTabOrder(ObjectId lay1Id, ObjectId lay2Id)
  2.         {
  3.             using (var tran = lay1Id.Database.TransactionManager.StartTransaction())
  4.             {
  5.                 var layout1 = (Layout)tran.GetObject(lay1Id, OpenMode.ForWrite);
  6.                 var layout2 = (Layout)tran.GetObject(lay2Id, OpenMode.ForWrite);
  7.                 var order1 = layout1.TabOrder;
  8.                 var order2 = layout2.TabOrder;
  9.                 layout1.TabOrder = order2;
  10.                 layout2.TabOrder = order1;
  11.                 tran.Commit();
  12.             }
  13.         }

方法的2个参数是2个布局的ObjectId,只要它们都不是“模型”布局
我刚刚用UI做了一个完整的可演示项目,以验证代码是否如我预期的那样工作。为了让其他可能的读者看到整个项目的代码,我将在今天晚些时候在我的博客中发布它,并在这里发布链接
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2017-5-31 12:13:27 | 显示全部楼层
好的,我在这里发布了完整的代码
http://drive-cad-with-code.blogspot.ca/2017/05/swap-layout-order.html
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2017-5-31 20:04:13 | 显示全部楼层

谢谢你,诺曼
关于,
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-5-31 23:44:41 | 显示全部楼层

这就是我得出的结论。我将查看您的代码,看看如何将类似的方法合并到我的项目中。我衷心感谢援助。
顺便说一句,我没有遇到任何错误,它只是不起作用。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2017-6-5 18:42:38 | 显示全部楼层
在所有受影响的选项卡上设置Taborder解决了这个问题。
感谢您的帮助...一件小事会导致这样的问题,真是令人惊讶!
现在该去弄清楚我一直害怕的另一件事了...
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 14:02 , Processed in 0.166914 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表