Запретить Revit получать команду delete в безмодовой форме

Я отчаянно пытаюсь предотвратить revit от получения команды удаления в то время как в бесмодельной форме (тот, который был показан с Show()и неShowdialog()), но я не могу, кажется, в состоянии остановить его.

Моя проблема в том, что моя форма содержит текстовые поля: ее основная функция требует, чтобы пользователь мог перемещаться (панорамирование и масштабирование) в revit без необходимости закрывать и повторно открывать форму.

Но как только пользователь нажимает delete на любом текстовом поле text revit думает, что пользователь ввел команду delete в главном окне, и это может привести к случайным удалениям.

Примечание api запрашивает revitdb на основе выбранных сущностей (семейств), а затем они могут переименовать тип семейства или имя семейства, используя текстовое поле и кнопку «Применить». Но как только они нажимают на кнопку delete на клавиатуре, угадайте, что-сущность удаляется в revit.

Я потратил 10 часов на это, и это может оказаться катастрофическим для моих планов.

1 ответ

  1. Ответьте на мой собственный вопрос: обходной путь состоит в том, чтобы просто «закрепить» выбранные элементы, когда пользователь нажимает на textbox.

            private void textBox3_MouseClick(object sender, MouseEventArgs e)
        {
            //find selected items
    
            Selection sel = uidoc.Selection;
            ICollection<ElementId> ids = sel.GetElementIds();
    
            foreach (ElementId id in ids)
            {
                Element el = doc.GetElement(id);
                el.Pinned = true;
            }
    
        }
    

    Затем открепите, когда пользователь покидает поле (неудовлетворительно andw.