如何防止控件在 TableLayoutPanel 内调整大小时视觉上滞后?

2024-05-15

我有一个基于多个嵌套的中等复杂度的布局TableLayoutPanels。调整窗体大小会导致更深嵌套表内的控件在视觉上滞后于调整大小。首先,这使得它们看起来像是在调整表单大小时四处移动,但更糟糕的是,当它们滞后到足以离开分配的表格单元格时,控件的边缘明显被剪切。

有什么办法可以防止这种情况还是这是最好的TableLayoutPanel can do?

Edit:在尝试了很多程序之后,我得出的结论是,调整大小时的滞后是一个普遍存在的问题。在我看来,似乎每个人都已经接受了这是不可避免的 and 可以接受。当然如果真的是这样的话不可避免的 then 接受这样就容易多了:)

查看您最喜欢的“良好 UI”程序中的滞后的最简单方法:通过按住左边界并观察所有右对齐控件跳转来调整其大小(或者,顶部边界和底部对齐控件,例如状态栏)。四周都坏了。

如果有人能提供充分的理由来解释为什么在使用本机 Windows 控件时这是不可避免的,我会接受这个答案。另外,如果您发现一个使用本机控件的程序不会遇到此问题,请说出来,这可能会有所帮助......


Windows 中本机控件的问题在于每个控件都负责绘制自身,这意味着将位图绘制到屏幕上。当容器控件中的每个控件调整大小时,它所占据的窗口区域将变得无效,因此不仅容器中的每个控件要重新绘制,容器本身也必须重新绘制。此外,调整大小/重绘事件都发生在 UI 线程上,因此它是单线程操作。 自 16 位 Windows 引入以来,本机窗口绘制背后的基本机制一直没有改变。

人们使用许多技巧来尝试解决这个问题,例如双缓冲、离屏渲染或简单地禁用调整大小。

要了解它应该是什么样子,请查看 WPF。 MS 开发它是为了解决这个问题。

如果 WPF 不是一个选项并且您使用的是 Windows 窗体,请查看layout http://msdn.microsoft.com/en-us/library/system.windows.forms.control.layout.aspx微软的相关文档。您可以实现自己的布局引擎,而不是依赖开箱即用的微软产品。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止控件在 TableLayoutPanel 内调整大小时视觉上滞后? 的相关文章

  • 多线程调试技术

    我想知道是否有人知道多线程应用程序调试技术的一个很好的调查 理想情况下 我正在寻找基于案例的分析 死锁 饥饿 损坏的共享状态 Net 特定的或通用的 我不知道有哪篇文章或书籍可以满足您的需求 因此这是我从 12 年 Windows 多线程调
  • 如何在应用程序目录层次结构中构建接口?

    将它们全部放在一个单独的文件夹结构中还是与实现它们的类一起放置 切勿将接口与实现它们的类放在一起 除非这些类满足以下要求 这样做将引入一个紧耦合在接口和实现者之间 如果不同时引用实现者 您将无法创建该接口的其他实现 你基本上有两个选择 将接
  • 我如何知道文件已打开或正在使用? [复制]

    这个问题在这里已经有答案了 可能的重复 有没有办法检查文件是否正在使用 https stackoverflow com questions 876473 is there a way to check if a file is in use
  • 将浮点型转换为双精度型

    我正在尝试转换Single to Double同时保持原来的价值 我找到了以下方法 Single f 5 2F Double d1 f 5 19999980926514 Double d2 Double Parse f ToString 5
  • .NET 的 C 代码解析器

    有谁知道 NET 的 C 解析器库吗 我打算将 C 代码解析为某种形式的对象图 这样我就可以将其转换为不同的语言 ANTLR 可以做你想做的事 它有一个 C 预处理器和 ANSI C 语法 https github com antlr gr
  • 替换字符串中的换行符 C#

    如何在 C 中替换字符串中的换行符 使用替换为Environment NewLine myString myString Replace System Environment NewLine replacement text add a l
  • Task.Factory.StartNew 或 Parallel.ForEach 对于许多长时间运行的任务? [复制]

    这个问题在这里已经有答案了 可能的重复 Parallel ForEach 与 Task Factory StartNew https stackoverflow com questions 5009181 parallel foreach
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • ASP.NET 3.5 更新至 4.0 -> Sys.WebForms.PageRequestManager 未定义

    正如标题所示 我最近将包含 UpdatePanels 和类似 AJAX 技术的 ASP NET 3 5 应用程序更新为 ASP NET 4 0 不幸的是 UpdatePanel 不再起作用 整页回发使一切都变得糟糕 Web config 文
  • 公共领域还好吗?

    在你像我最初那样做出直觉反应之前 请阅读整个问题 我知道它们让你感觉很脏 我知道我们以前都被烧伤过 我知道这不是 好风格 但是公共场所可以吗 我正在开发一个相当大规模的工程应用程序 该应用程序创建并使用结构的内存模型 从高层建筑到桥梁再到棚
  • 如何在 IIS 中手动配置虚拟目录

    我正在尝试让外部 Visual Studio 解决方案在 Visual Studio Professional 2010 的本地副本中工作 当我打开该解决方案时 我看到一条错误消息 指出本地 IIS URL 尚未配置 我想创建一个虚拟目录吗
  • 实体框架中的 DbSet [重复]

    这个问题在这里已经有答案了 我在实体框架中有以下代码 using var dbc new TestDbContext var data from a in dbc tableList select new a id ToList 当我调试代
  • DBNull 怎么会不等于 DBNull

    我有以下代码行 if DBNull Value Equals o o null where o is object o in row ItemArray我不断收到错误 gt Xml type List of xdt untypedAtomi
  • 正则表达式获取模式的最后一次出现

    我有一个字符串 我需要选择最后一次出现的模式 该字符串是 1302638400000 0 0 1302724800000 0 610 64999999999998 1302811200000 0 2266 6500000000001 130
  • 将 KeyDown 事件传递给其他控件

    我正在编写一个 C WinForms 应用程序 NET 4 0 我有一个WinFormsControl on a Form 用户开始使用键盘输入内容后 另一个Control出现 那Control是某种文本输入 我想将用户输入发送到该Cont
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 假装 .NET 字符串是值类型

    在 NET 中 字符串是不可变的 并且是引用类型变量 这通常会让新的 NET 开发人员感到惊讶 因为他们的行为可能会将它们误认为是值类型对象 然而 除了使用实践StringBuilder对于长连接 尤其是 在循环中 在实践中是否有任何理由需
  • 从共享网络文件夹运行的 .NET 应用程序的性能损失

    从共享网络文件夹运行 NET 4 0 应用程序是否有任何性能损失 我发现哪个应用程序启动速度较慢 但 在使用时没有注意到任何变慢 但不确定 当通过网络运行可执行文件时 Windows 不会在应用程序启动时通过网络传输整个应用程序 这样做是为
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • Visual Studio '17 未在参考管理器中显示程序集

    我遇到的问题是 我似乎无法弄清楚如何添加对某些解决方案的引用 在我从 Visual Studio 17 开始的大多数解决方案中 我在解决方案资源管理器中看到 引用 但例如对于 asp net core web api 我得到 依赖项 每当解

随机推荐