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