2010-08-03 12 views
1

양식에 대해 ScrollableControl.AutoScrollMinSize이 무엇인지 확인하기 위해 Control.PreferredSize을 사용하고 있습니다. 컨트롤의 PreferredSize 속성이 변경 될 때마다이 값을 설정해야하지만 Control.PreferredSizeChanged 이벤트는 나타나지 않습니다. 이 속성이 변경되면 (아마도 Control.WndProc을 사용하여) 감지하는 방법이 있습니까? 그것이 피할 수있는 경우 속성을 폴링하지 않도록하는 것이 좋습니다.Control.PreferredSize가 변경되면 어떻게 감지합니까?

답변

1

OnLayout 또는 OnPaint를 재정의 할 수 있습니다.

private Size m_CurrentPreferedSize; 
    protected override void OnLayout(LayoutEventArgs e) 
    { 
     base.OnLayout(e); 
     Size newSize = PreferredSize; 
     if(m_CurrentPreferedSize != newSize) 
     { 
      m_CurrentPreferedSize = newSize; 
      //Your code here 
     } 
    } 

PreferredSize는 모든 호출에서 계산됩니다.

+0

나는 그 방법이 너무 자주 호출되기 때문에 OnPaint를 오버라이드하지 않을 것입니다. * PreferredSize가 변경 될 때마다 OnLayout이 호출되도록 보장되는지는 확실하지 않지만 작동하는 것으로 보입니다. 나는 OnLayout이 호출되지 않게하는 PreferredSize를 변경시키는 시나리오를 찾지 못했습니다. –

관련 문제