Всем привет. Надеюсь тема не окажется снова глупой ))
Значит так - есть два метода: один удаляет листы, второй добавляет новый лист. С удалением одного листа вроде проблем не замечается, но с удалением нескольких - происходит следующая проблема
По порядку:
1. Удаление нескольких листов происходит так:
else if (LvLayouts.SelectedItems.Count > 1)
{
if (MpQstWin.Show("Вы уверены, что хотите удалить выбранные листы?"))
{
var layoutsToDelete = LvLayouts.SelectedItems.OfType<Layout>().Where(selectedLayout => !selectedLayout.ModelType).ToList();
if (layoutsToDelete.Count > 0)
{
using (var tr = _currentDocument.TransactionManager.StartTransaction())
{
using (_currentDocument.LockDocument())
{
var lm = LayoutManager.Current;
foreach (var layout in layoutsToDelete)
{
lm.DeleteLayout(layout.LayoutName);
_currentDocLayouts.Remove(layout);
}
BindingLayoutsToListView();
}
tr.Commit();
_currentDocument.Editor.Regen();
}
}
}
}
Пояснять, думаю, особо нечего - в ListBox'е я выбрал листы (там идет Binding самих Layout) и по именам этих листов удаляю их, используя LayoutManager.DeleteLayout. Читал на форумах, что это работать должно без транзакции, но не работает...
В автокаде на первый взгляд все выглядит нормально. Листы удаляются. В примере - было 8 листов и я удалил 3:
Дальше я использую метод для создания нового листа. В общем сам метод не важен, а важно только то, что для задания имени нового листа я использую такой код:
Text = "Лист" + lm.LayoutCount. Т.е. беру номер, равный количеству листов в LayoutManager. И вот тут самая проблема и возникает - в LayoutManager.LayoutCount совсем другое значение! Я добавил в этот метод строчку
MessageBox.Show(lm.LayoutCount.ToString()); и в показанном на картинке выше примере сразу-же вызвал этот метод. И вот результат:
В LayoutManager.LayoutCount должно быть значение 5, а там значение 7. Думаю, вся проблема в коде удаления нескольких листов. Получается, что нужно для удаления каждого открывать транзакцию и вызывать метод Commit()