PropertyGrid에서 새로 고침의 스크롤을 방지하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/288893

  •  08-07-2019
  •  | 
  •  

문제

도구 앱에서 PropertyGrid를 사용하여 원격 앱에서 객체를 모니터링하기 위해 창을 표시합니다. 매 초마다 변경된 멤버의 상태와 함께 앱에서 업데이트를 받고 그리드를 업데이트합니다. 변경 사항을 취하기 위해 새로 고침 ()에 전화합니다. 이것은 한 가지를 제외하고는 모두 잘 작동합니다.

물체가 너무 키가 너무 키가 그리드에 맞지 않아 스크롤 바가 있다고 가정 해 봅시다. 사용자는 그리드 항목을 선택했지만 선택한 항목이 컨트롤 하단 아래에 있도록 위로 스크롤했습니다.

문제는 refresh ()에서 컨트롤이 그리드 항목을 자동으로 스크롤한다는 것입니다.

나는 이것을 방지하거나 상태를 저장하고, 새로 고침 ()을 수행 한 다음 다시 설정하는 방법을 찾고 있습니다. PropertyGrid 내부의 PropertyGridView에서 기본 vscrollbar를 가져 와서 "값"을 엉망으로 만들려고했지만 영구적으로 설정되지는 않았습니다. 항목이보기에 항상 뒤로 물러납니다.

스크롤 중에 항목을 선택 해제하는 것은 내 폴백입니다 (자동 스크롤-뷰 뷰는 선택한 그리드 항목 없이는 발생하지 않습니다).

누구든지 비슷한 일을 마치고 있습니까?

도움이 되었습니까?

해결책

MS PropertyGrid에서는 불가능합니다. 이 구성 요소에는 접근 할 수없는 내부가 너무 많아서 요청하는 유연성을 제공하고 자신을 깨달았을 때 일관성이 없다는 것을 깨달았습니다 (그리드 아래의 속성에 대한 문제가 있지만 위의 경우에는 그렇지 않습니다). 그것이 내가 만든 이유입니다 Smart PropertyGrid.net. 상용 제품이 귀하를위한 옵션 인 경우이 그리드에는 깜박임없이 그리드 (Ryphend ())에서 조치를 취한 후 재산 상태를 저장하고 복원 할 수있는 옵션이 있습니다.

다른 팁

흥미로운 해킹을 찾았습니다.

변경 한 그리드 항목을 수동으로 선택할 수 있으며 새로 고침됩니다 :)

var panProp = categ.GridItems[3];
var tiltProp = categ.GridItems[4];
panProp.Select();
tiltProp.Select();

그래서 필요한 항목을 선택하고 선택을 다시 옮기는 것보다

나에게 다음은 차이를 만들었습니다.

새 개체를 할당하지 마십시오.

새 데이터로 이전 객체의 필드를 업데이트하기 만하면됩니다.

이제 새로 고침에서 내 PropertyGrid는 더 이상 스크롤하지 않으며 업데이트 된 컨텐츠도 표시합니다.

public void SoftRefreshPropertyGrid()
{
     var peMain = propertyGrid.GetType().GetField("peMain", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(propertyGrid)as  System.Windows.Forms.GridItem;
     if (peMain != null)
     {
           var refreshMethod = peMain.GetType().GetMethod("Refresh");
           if (refreshMethod != null)
           {
                  refreshMethod.Invoke(peMain, null);
                  propertyGrid.Invalidate(true);
           }
     }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top