【问题标题】:Update win form display while resizing a splitView control?在调整 splitView 控件大小时更新 win 表单显示?
【发布时间】:2020-12-18 08:43:45
【问题描述】:

移动拆分视图分隔线时 Windows 窗体上的默认行为会显示分隔线的“阴影”,并在移动后更新显示。有没有办法在拖动/调整大小时强制显示不断更新?

【问题讨论】:

  • Invalidate() 调整大小并拖动它。
  • 感谢您的回答。无法编辑 cmets 所以删除了前一个。我尝试在拆分控件的各种事件中使用 Invalidate() 和 Update():mouseMove、mouseDown、splitterMoving。全部不产生任何变化。 MovingSplitter 事件确实会正确触发,但调用 Invalidate、update 或 refresh 会强制任何重绘。知道为什么吗?
  • 啊。它正在重绘,但只是没有使用新的拆分器位置。我想我必须手动设置拆分器位置,除非有我不熟悉的自动方式?

标签: c# winforms resize


【解决方案1】:

对于希望在拖动拆分器时不断更新窗口窗体显示的其他人,这里有一个答案:Refresh the panels of a SplitContainer as the splitter moves

有兴趣的朋友可以参考一下

splitView 控件有一些在这种情况下看起来很有用的事件,尤其是 splitterMoving 事件。

在此事件中调用 Refresh()、Invalidate() 和/或 Update() 会重绘控件(或整个表单?),但只是原样。当它处于“阴影拖动”状态时,分离器并没有真正移动。所以它只是用相同的信息不断更新,所以似乎什么也没做。

splitterMoving 事件确实可以访问变量 splitX 和 splitY,其中包含在“影子状态”中移动时拆分器的新值。拖动完成后使用这些值来设置 splitterDistance。

但是,使用这些值直接更新 splitterDistance 变量并调用 Refresh() 会导致拆分器出现一些奇怪的行为,似乎因为它有自己的内部逻辑来处理移动拆分器并在此期间设置手动值会导致干扰。

贴在这篇文章顶部的答案 (Refresh the panels of a SplitContainer as the splitter moves) 通过关闭内置移动然后直接设置 splitterDistance 来克服这个问题。它在拆分器上使用多个事件和设置状态,效果很好,但有一点需要注意。

CPU 使用率

在拖动时更新表单导致我的第 6 代 i5 3.3ghz cpu 在移动分离器时从几乎 0% 的使用率变为 25%+。当我设想在多任务处理时使用我的表单时,我认为努力和 CPU 使用对于简单的视觉增强来说是不值得的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多