【问题标题】:WinForms: No Pending Calls to SuspendLayout()WinForms:没有挂起的 SuspendLayout() 调用
【发布时间】:2021-05-21 22:25:15
【问题描述】:

在 Control.SuspendLayout() 的 Windows 窗体文档中,有以下语句:

必须没有挂起的 SuspendLayout 调用才能使 ResumeLayout 调用成功。

此语句中有一些加载的短语(例如“待定呼叫”)。

  • 此语句对应于哪些场景?
  • 我需要防范哪些情况?

见:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.suspendlayout?view=net-5.0

【问题讨论】:

标签: c# winforms


【解决方案1】:

他们的意思是,您必须与SuspendLayout 一对一地致电ResumeLayout

所以,为了防止这种状态,你可以这样做:

MyControl.SuspendLayout();
try
{
    // do some work
}
finally
{
    MyControl.ResumeLayout();
}

这样,如果“做一些工作”块抛出异常,您可以确保始终调用ResumeLayout,否则暂停/恢复将变得不平衡,您的 UI 将无法正确更新。

换句话说,如果你这样做:

MyControl.SuspendLayout();
MyControl.SuspendLayout();
MyControl.ResumeLayout();

那么ResumeLayout 将不会产生预期的效果。

但是,这会:

MyControl.SuspendLayout();
MyControl.SuspendLayout();
MyControl.ResumeLayout();
MyControl.ResumeLayout();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多