Winforms 如何检测Control.PreferredSize何时更改?

Winforms 如何检测Control.PreferredSize何时更改?,winforms,controls,Winforms,Controls,我使用来确定表单的属性应该是什么。每当控件的PreferredSize属性更改,但似乎没有控件。PreferredSizeChanged事件时,都需要设置此项。是否有方法检测此属性何时更改(可能使用)?如果可以避免,我希望避免轮询属性。您可以覆盖OnLayout或OnPaint private Size m_CurrentPreferedSize; protected override void OnLayout(LayoutEventArgs e) {

我使用来确定表单的属性应该是什么。每当控件的PreferredSize属性更改,但似乎没有控件。PreferredSizeChanged事件时,都需要设置此项。是否有方法检测此属性何时更改(可能使用)?如果可以避免,我希望避免轮询属性。

您可以覆盖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。

您可以覆盖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。

我不希望重写OnPaint,因为该方法调用太频繁。现在还不清楚OnLayout是否保证在PreferredSize每次更改时都会被调用,但它似乎确实有效;我找不到导致PreferredSize更改的场景,该场景不会同时导致OnLayout被调用。我不希望重写OnPaint,因为该方法被频繁调用。现在还不清楚OnLayout是否保证在PreferredSize每次更改时都会被调用,但它似乎确实有效;我找不到导致PreferredSize更改的场景,该场景不会同时导致调用OnLayout。