2012-07-10 2 views
2

이것은 stackoverflow에 대한 나의 첫 번째 질문이므로 실수를 저지른 경우 나와 함께하시기 바랍니다.방법 : 사용자가 편집하지 않을 때 PropertyGrid 새로 고침

배경 : 카메라 개체의 이득 및 노출과 같은 상태를 표시하는 Winform PropertyGrid가 있습니다. 사용자는 PropertyGrid를 통해 카메라 속성을 쉽게 제어/편집 할 수 있습니다. 한편, 카메라 객체는 주기적으로 물리적 카메라의 최신 상태를 쿼리하고 INotifyProperfyChanged를 통해 PropertyGrid에서 새로 고침을 발생시킵니다.

문제 : 사용자가 입력하는 동안 새로 고침이 발생한 경우/(예 : 새 셔터 시간 값을 입력하는 등) PropertyGrid가에 편집 데이터가 초점이 갑자기 유실되고 입력 된 값은 카메라에서 새로운 값으로 대체 될 것이다. 이로 인해 비우호적 인 UI 경험이 생겼습니다.

질문 : 어떻게 사용자가 편집을 수행 할 때 새로 고침을 수행 PropertyGrid가를 방지하기 위해?

미리 감사드립니다.

+0

상단의 코드 자체를 사용하여 내 대답을 편집했습니다. – KreepN

답변

1

편집 (중부 표준시 오후 1시 54분) :

if(FindFocusedControl(this).GetType().ToString() != "GridViewEdit") 
{ 

} 

이 있는지 확인합니다 : 당신이 원하는 코드는 당신이 그 안에 업데이트를 수행하기 위해 업데이트 코드/메소드 호출을 래핑하는 것처럼, 이것이다 활성 컨트롤 (이 경우에는 propertygrid 내의 셀)이 활성화되어 있고 true이면 중첩 된 코드를 건너 뜁니다. 당신이/집중 사용되는 것을 제어 확인하는 조건에 If에서 업데이트를 수행 어떤 코드를 포장 할 수 있어야한다 this SO question and answer에서 다음과 같은 방법을 활용


. 사용중인 컨트롤이 propertygrid 인 경우 아무 것도하지 마십시오. 당신이 그것을 시도하려는 경우

public static Control FindFocusedControl(Control control) 
    { 
     var container = control as ContainerControl; 
     while (container != null) 
     { 
      control = container.ActiveControl; 
      container = control as ContainerControl; 
     } 
     return control; 

    } 

것은, 그것에게 양식을 전달하고 결과를 확인 : 새 사용자가다시피이 당신을 위해 밖으로 작동하는 경우

var a = FindFocusedControl(this); 

이, 당신이 대답을 받아 들일 수를 제공된 답의 왼쪽에있는 체크 표시를 클릭하십시오. 이를 통해 다른 사용자가 나중에 질문에 응답 할 때 어떤 일을하는지 알 수 있습니다.

+0

고마워요! 이것은 효과가 있었다. 이제 PropertyGrid는 포커스가 없을 때만 새로 고침됩니다. 사용자가 항상 PropertyGrid에 집중할 때 실시간 데이터 업데이트가 지연 될 수 있지만 이러한 동작은 이전보다 개선되었습니다. – seekingalpha

+0

일정 시간이 지나면 포커스가 다른 컨트롤 (예 : 레이블 또는 양식 자체)으로 설정된 비 활동 타이머를 통해 쉽게 해결할 수 있습니다. 다행히 도와 줘서 고, 오신 것을 환영합니다! – KreepN

+0

타이머는 좋은 생각입니다! 다시 한 번 감사드립니다! – seekingalpha

관련 문제