Положение:
У меня есть окно со сценой OpenGL, отображаемой внутри. Рядом со сценой OpenGL у меня есть PropertyGrid выбранного 3D-объекта в сцене.
Объекты в сцене могут быть изменены другими способами, кроме простого редактирования свойств (например, некоторые объекты обрабатываются с помощью запущенного сценария, который перемещает / масштабирует / окрашивает / ... объекты в сцене). Чтобы показать прямую подачу значений объекта в PropertyGrid, сетка обновляется каждый кадр, например:
void OnFrame()
{
myPropertyGrid.Refresh();
}
Проблема: Из-за этого обновления каждого кадра я не могу открыть ни одно раскрывающееся окно в PropertyGrid (открытое раскрывающееся окно закрывается сразу же при обновлении PropertyGrid).
Вопрос: Есть ли какой-нибудь способ обнаружить, что раскрывающийся список открыт (например, свойство для проверки или событие, на которое можно подписаться), и предотвратить обновление в этом случае?
void OnFrame()
{
if ( !PropertyGridInEditMode() ) // <-- What should this function check?
myPropertyGrid.Refresh();
}
Примечание. По-видимому, простая проверка myPropertyGrid.ContainsFocus
работает нормально, если просто ввести в поле значения PropertyGridItem, но не удается определить, если раскрывающийся список открыт (я полагаю, это потому, что раскрывающаяся форма вызывается с помощью IWindowsFormEditorService
, и поэтому раскрывающийся список представляет собой отдельную форму, которая не является дочерней по отношению к PropertyGrid).