我看过那篇文章。如果我能保证它能像广告中所说的那样工作,我不会反对做它所建议的事情。现在,我想在taborder中向上或向下重新排序单个选项卡
我确实有一个想法,我将尝试看看解决问题的方法
既然我的一篇老文章已经提到了,让我插一句:
我认为你的代码不起作用的原因是你只是试图更改一个布局的TabOrder,但没有尝试更改受影响的布局(更改之前和/或之后的布局),这将导致重复的TabRoder,从而在事务提交时出现异常。如您所见,始终存在模型布局,它始终具有TabOrder=0。因此,不能向下移动TabOrder1=1的布局。如果布局具有最大选项卡顺序,则不能将其上移。因此,当您说“重新排序”布局选项卡时,它实际上是两个布局的交换选项卡顺序:目标布局和它前面的布局(只要它不是“模型”),或它后面的布局(如果它不是最后一个)
- public static void SwapLayoutTabOrder(ObjectId lay1Id, ObjectId lay2Id)
- {
- using (var tran = lay1Id.Database.TransactionManager.StartTransaction())
- {
- var layout1 = (Layout)tran.GetObject(lay1Id, OpenMode.ForWrite);
- var layout2 = (Layout)tran.GetObject(lay2Id, OpenMode.ForWrite);
- var order1 = layout1.TabOrder;
- var order2 = layout2.TabOrder;
- layout1.TabOrder = order2;
- layout2.TabOrder = order1;
- tran.Commit();
- }
- }
方法的2个参数是2个布局的ObjectId,只要它们都不是“模型”布局
我刚刚用UI做了一个完整的可演示项目,以验证代码是否如我预期的那样工作。为了让其他可能的读者看到整个项目的代码,我将在今天晚些时候在我的博客中发布它,并在这里发布链接 |