【发布时间】:2011-09-22 13:47:29
【问题描述】:
在我的用户控件中,我执行了一个冗长的操作。为了防止用户点击 UI,我显示了一个进度条并禁用了整个 UI,如下所示:
this.Enabled = false;
ShowProgressBar();
DoLengthyOperation();
RemoveProgressBar();
this.Enabled = true;
这工作正常。但是,我的用户控件上有许多其他控件,它们内部也有控件,它们内部也有控件,等等。
this.Enabled = false
call 因此禁用了许多控件。这是故意的。但我遇到的问题是,您实际上可以看到 UI 一个一个地禁用每个控件。它运行得非常快,但是由于控件太多,您实际上可以看到它在所有控件中运行。这看起来不专业,它让屏幕闪烁,我的眼睛很痛。
有什么方法可以防止 UI 重绘,直到所有控件都被禁用,然后再执行一次重绘?
我希望这不是一个愚蠢的问题;)
不知道这是否相关:我的控件来自 DevExpress.XtraEditors.XtraUserControl。
【问题讨论】:
-
我不知道它是否会有所帮助,但您可以在
this.Enabled = false;之前尝试this.SuspendLayout()并在之后尝试 'this.ResumeLayout()`。这应该阻止一切处理布局更改。不过,我不确定启用/禁用是否被视为布局更改或绘画更改。否则,我认为您必须捕获并停止所有OnPaint事件。 -
其实我认为我的问题是这个问题的重复:stackoverflow.com/questions/487661/…我还没有尝试过那个解决方案。
标签: c# winforms user-interface drawing