活动滚动时绘制面板边框

2024-03-12

当我尝试制作面板边框时,我遇到了问题,首先我将属性面板设置为:“自动滚动=真;”然后我将边框绘制代码放在面板事件中:

    ControlPaint.DrawBorder(e.Graphics, 
        ClientRectangle,  
        Color.Black, 5, 
        ButtonBorderStyle.Solid,
        Color.Black, 5, ButtonBorderStyle.Solid, 
        Color.Black, 5, ButtonBorderStyle.Solid,
        Color.Black, 5, ButtonBorderStyle.Solid);

actually i still got a second problem and i will explain it all here.. I hope you don't mind. well, the panel border will get some crash when the panel scroll is being active. take a look at the picture: enter image description here

即使我把

`e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);`

它看起来不像边框面板,因为当滚动处于活动状态时,它只是在面板内绘制一个矩形。这不是我所期望的,但我需要一个Border

我敢打赌,问题是源代码,那不是因为它不可能,看看系统.Windows.窗体.面板我认为它是完美的面板,尽管它很简单。 请帮我解决这个问题。这让我很困惑


这不会很好地工作,你正在对抗一个名为“拖动时显示窗口内容”的 Windows 系统选项。它在所有最新的 Windows 版本中都已打开,并且您无法合理地将其关闭。该选项的作用是当您操作滚动条时以优化的方式滚动窗口内容。它按滚动量复制窗口像素,并要求重新绘制滚动显示的窗口部分。

问题是,这也移动了你画的边框。所以你会看到底部的黑线也向上移动。但它不会被删除,因为 Windows 只要求重新绘制滚动显示的窗口部分。所以它“涂抹”。最上面的一行就消失了,滚动消失了。要解决此问题,您需要重新绘制entire窗户。通过为面板控件实现 Scroll 事件很容易做到:

    private void panel1_Scroll(object sender, ScrollEventArgs e) {
        panel1.Invalidate();
    }

这解决了问题,但您可能仍然会注意到速度较慢的机器上出现伪影。那条黑线仍在向上移动,很快就会被 Paint 事件处理程序再次覆盖。 “快”是问题所在,如果不是那么快,那么您仍然会看到该线移动。这个人工制品很有趣,你会看到这条线在做弹簧单高跷,上下跳跃。人眼对这样的运动非常敏感,能够善于在高大的稀树草原草丛中发现狮子是一种进化优势。

试图让对象在滚动窗口中保持静止的效果并不好。您可以使用面板控件并为 WM_NCCALCSIZE 实现消息处理程序,为面板提供非客户区,但这相当痛苦。

简单的解决方案是让表单在面板周围绘制一个矩形:

    protected override void OnPaint(PaintEventArgs e) {
        var rc = panel1.Bounds;
        rc.Inflate(1, 1);
        e.Graphics.DrawRectangle(Pens.Black, rc);
        base.OnPaint(e);
    }

或者更简单的是,设置面板的 BorderStyle。

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

活动滚动时绘制面板边框 的相关文章

随机推荐

  • 生成偶数随机数

    我需要一个代码来仅生成随机偶数 2 100网上有生成随机数的教程 但它们有奇数和偶数 请理解我只需要生成偶数 1 生成数字1 50 2 将所有数字乘以2 所有数字乘以 2 都是偶数
  • Selenium 使用相对 XPath 定位器显式等待

    将 Selenium WebDriver 与 Python 3 4 结合使用 我正在编写一个抓取工具 并使用相对于某些非根祖先元素的 XPath 来定位元素 如下所示 ancestor element driver find element
  • Julia 中的并行梯度计算

    不久前我被说服放弃我舒适的 matlab 编程并开始使用 Julia 编程 我已经在神经网络方面工作了很长时间 我认为现在有了 Julia 我可以通过并行计算梯度来更快地完成工作 不需要一次性对整个数据集计算梯度 相反 我们可以拆分计算 例
  • SQL 中的标准差命令

    在 C 中从数据库检索数据后 我必须实现标准差 我必须从字段名称中检索一组值income其中性别是male or female 有没有直接计算标准差的SQL命令 或者我应该使用 C 单独计算它 Try the STDEV http msdn
  • 将 C++ 字符串变量转换为 long

    我有一个变量 string item 它在运行时初始化 我需要将其转换为长 怎么做 我尝试过 atol 和 strtol 但对于 strtol 和 atol 总是分别出现以下错误 cannot convert std string to c
  • 模板 typedefs - 你的工作是什么?

    C 0x 有模板别名 有时称为模板类型定义 看here http en wikipedia org wiki C 2B 2B0x Alias templates 当前的 C 规范没有 您喜欢用什么来解决问题 容器对象还是宏 你觉得值得吗 您
  • jQuery Mobile 使用 AJAX 数据增长文本区域

    我正在通过以下方式将文本加载到输入框 textarea val ajaxData 但是它不会自动增长 并且我的数据未完全显示 有什么方法或任何东西可以调用来强制更新吗 确实有一个内部函数负责调整大小 称为resizeCheck 但是 该函数
  • 如何使用 Javascript/Jquery 添加子元素

    我需要一位帮助 我需要使用 Javascript Jquery 中的按钮单击来添加子元素 我将在下面解释我的代码 div class form group div
  • RMarkdown / pandoc 无法使用乳胶颜色命令编织 Pdf

    Mac 操作系统 10 11 6 R版本 3 3 1 MacTex 2016 TexLive 6 2 2 RMarkdown 1 0 9014 针织 1 14 潘多克 1 17 当乳胶命令如下时 RMarkdown 无法编织 PDF tex
  • 如何将参数传递给使用“include”呈现的PHP模板?

    需要 PHP 模板方面的帮助 我是 PHP 新手 我来自 Perl Embperl 无论如何 我的问题很简单 我有一个小模板来渲染一些项目 让它成为一篇博客文章 我知道使用此模板的唯一方法是使用 include 指令 我想在遍历所有相关博客
  • DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER 错误

    我的包由动态数据库连接组成 当我运行我的包时 它抛出类似 DTS E CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER 的错误 对连接管理器 conn 的 AcquireConnection 方法调用
  • Bash:当子脚本捕获 SIGINT 时,为什么父脚本不会在 SIGINT 上终止?

    脚本1 sh bin bash script2 sh echo after script 脚本2 sh bin bash function handler exit 130 trap handler SIGINT while true do
  • Hibernate使用PostgreSQL序列不影响序列表

    我已将 Hibernate 配置为使用 PostgreSQL 序列 通过注释 来生成主键值id栏目如下 Id SequenceGenerator name pk sequence sequenceName entity id seq Gen
  • Tapestry 5.4:如何使用外部 dist 包?

    我想使用 swagger ui 中的 dist 包来公开我的 web 服务 dist pkg 位于此处 https github com swagger api swagger ui tree master dist https githu
  • 核心数据不保存对 Transformable 属性的更改

    我正在保存一个NSMutableArray在我的核心数据存储中的 Transformable 属性中 我可以使用中的数据正确创建实体NSMutableArray然后将其从属性中加载出来 甚至进行更改 当我浏览我的应用程序并重新访问它时 我的
  • 如何在jsp中显示从dao获取的数据

    in jsp table width 100 border 0 cellspacing 2 cellpadding 2 tr class tab highlighted 2 td class tab highlighted 2 width
  • 如何创建php调度进程?

    我被要求创建一个网络应用程序 它将在特定时间内向用户发送更新 例如 2009 年 6 月至 8 月期间 user1 每 5 分钟请求一次更新 user2 仅今天每 10 分钟请求一次更新 从 2009 年 6 月到 8 月 user3 每
  • 当我使用 Tomcat 7 JDBC 连接池取消部署 Web 应用程序时,为什么连接仍然存在?

    我已经将一个最小的 Spring Web 应用程序部署到 Tomcat 7 0 22 它由几个页面 一个控制器 一个服务和一个 DAO 组成 该 DAO 有一个运行 SELECT 查询的方法 Web 应用程序配置为使用新的Tomcat JD
  • 访问带有向量索引的矩阵

    我有一个矩阵 a 16x3 和一个向量 b 16x1 b 显示矩阵 a 中每行有多少个有效值 a magic 3 a 8 1 6 3 5 7 4 9 2 b 1 3 2 b 1 3 2 我想做的是将无效值设置为 NaN a b 1 end
  • 活动滚动时绘制面板边框

    当我尝试制作面板边框时 我遇到了问题 首先我将属性面板设置为 自动滚动 真 然后我将边框绘制代码放在面板事件中 ControlPaint DrawBorder e Graphics ClientRectangle Color Black 5