如何检测控件是否对用户可见?我有一个显示应用程序状态的控件,我希望仅在用户看到它时更新它(例如,增加进度条的值或更改标签的Text属性)。如果用户最小化了包含此控件的窗体,或者另一个窗体覆盖了此控件,则无需更新它。如果控件无论如何都不可见,我不想进行额外的计算。
另外,如何检测隐藏/显示此控件的事件?
这是不必要的。当窗口不可见时,Windows不会生成Paint事件。如果您自己实现了绘图,请确保仅在Paint事件中执行此操作,并在需要重新绘制时调用Invalidate()。
这似乎是一个经常被问及的主题,具有多种可能的解决方案,取决于上下文。
首先,为了参考起见,以下是我在研究过程中偶然发现的一些旧讨论的链接:
起始位置:一种用于异构系统的 IDE,具有许多不同的硬件和许多不同的传输层,其中一些传输层非常慢。一个特点是在编辑器中显示远程硬件的内存值。一个典型的用例是打开 >20 个编辑器,每个编辑器显示 1 至 100 个不同的值。
由于传输层的带宽受限,我正在寻找一种“优先”数据采集的解决方案。
(部分)解决方案: 一个可见性跟踪器,基本上管理控件本身和每个祖先控件的专用适配器。适配器处理依赖于祖先类型的可见性,例如对于 Control,它只是 instance.Visible,对于 TabPage,我检查哪个页面被选中,... 然后管理器的维护工作就是跟踪所有祖先的父级更改,以便它跟踪正确的可见性。