C # PropertyGrid - Проверьте, редактируется ли значение в настоящее время - PullRequest
1 голос
/ 26 сентября 2011

Существует ли простой способ узнать, редактирует ли пользовательская сетка в данный момент?

Мой пример использования следующий: я обновляю данные сетки каждую секунду.Если пользователь редактирует значение, все входные данные теряются при вызове моего обновления.Поэтому я хочу обновить только в том случае, если пользователь что-то не редактирует.

1 Ответ

4 голосов
/ 27 сентября 2011

Не думаю, что есть какой-то официальный путь.Однако следующий фрагмент кода может определить, когда запись в сетке открыта, используя встроенный редактор текстовых полей или раскрывающийся редактор.Он не определяет, когда запись открывается с помощью маленькой кнопки «...».

public static bool IsInEditMode(PropertyGrid grid)
{
    if (grid == null)
        throw new ArgumentNullException("grid");

    Control gridView = (Control)grid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(grid);
    Control edit = (Control)gridView.GetType().GetField("edit", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(gridView);
    Control dropDownHolder = (Control)gridView.GetType().GetField("dropDownHolder", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(gridView);

    return ((edit != null) && (edit.Visible & edit.Focused)) || ((dropDownHolder != null) && (dropDownHolder.Visible));
}

Конечно, поскольку она основана на внутренней структуре сетки, она может измениться в будущем, поэтомуиспользуйте на свой страх и риск.

...