Есть ли способ определить, редактирует ли пользователь свойство в сетке свойств? - PullRequest
2 голосов
/ 22 сентября 2010

У меня есть форма Windows (.NET 3.5), которая содержит элемент управления сеткой свойств. Элемент управления gridg периодически обновляется и отображает любые изменения, которые могли произойти в классе, который он представляет. Я хочу, чтобы обновление происходило только в том случае, если пользователь в данный момент не редактирует свойство в сетке. Есть ли способ определить, редактирует ли пользователь текущий элемент управления?

Ответы [ 4 ]

2 голосов
/ 24 мая 2011

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

bool isEditing = (propertyGrid.ActiveControl.GetType().Name != "PropertyGridView");
1 голос
/ 22 сентября 2010

Возможно, есть, но можно ли порекомендовать использовать ваш тип INotifyPropertyChanged вместо обновления сетки по таймеру?Таким образом, вам никогда не придется звонить Refresh самостоятельно;дисплей будет автоматически обновлять значение, отображаемое для каждого свойства, при каждом изменении этого свойства.

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

0 голосов
/ 22 сентября 2010

Вы можете подключить событие OnLostFocus.Таким образом, элемент управления будет обновляться только после того, как у него больше не будет фокуса.

protected virtual void OnLostFocus( EventArgs e)
0 голосов
/ 22 сентября 2010

Это довольно сложная проблема. Я бы предложил двухсторонний подход:

Если элемент управления не был изменен в пределах определенного порога и имеет фокус, или , если элемент управления не имеет фокуса, я бы посчитал, что этого достаточно, чтобы определить, что он в данный момент отсутствует редактируется.

...