问题标签 [onpaint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1909 浏览

c# - 如何阻止Paint事件堆积

我正在创建一个应用程序来安排不同的任务。这些通过在面板上绘制矩形来显示。这必须是响应式的。所以我需要在每次尺寸变化时绘制并使其无效。当我达到规划面板的最大高度时,它会自动滚动。

问题是当我抓住滚动条并开始滚动一点时,当我释放滚动条时,我的整个应用程序和计算机都会冻结。

这很可能是由于每次滚动和堆叠都会调用 onpaint 事件,导致应用程序挂起,直到它们全部完成。

现在我的问题是:我将如何解决这个问题?可能是通过防止绘制事件被多次调用,但是如何?

绘制事件调用的方法:

0 投票
1 回答
75 浏览

c#-4.0 - 只更新用户控件的一部分

我正在开发用于视频使用的时间线用户控件。这是我的工作照片: 在此处输入图像描述

在这里我有问题。当 currentTime 改变时,我必须更新 UI。但是当我使用 this.Invalidate(); 它刷新了整个控件。但我只想更新指针(灰色背景中的白线)。因为它会导致控件在非常小的时间变化上一遍又一遍地闪烁。如何只更新指针?这是我的 onPaint 方法

0 投票
2 回答
494 浏览

c# - 使用 OnPaint() 方法

我正在使用这个库将二维码生成到 WinForm 应用程序中,但我真的不知道如何使用 OnPaint() 方法。

所以我有这个:

我在表单中有一个简单的图片框,我只想在其中生成二维码图像(如果可以在图片框中生成它)。

0 投票
1 回答
521 浏览

c# - 未同时绘制控件

我有一个我正在使用的表单,ShowDialog其中包含几个文本框、标签和一个按钮。我遇到的问题是文本框是在表单本身和其他控件被绘制之前绘制的。

我正在覆盖OnPaint我不确定这是否会导致问题的方法:

这只是一个轻微的延迟,但它是可见的和烦人的。谢谢你。

顺便说一下,表单是双缓冲的。

编辑:我已经指出问题在于表单没有FormBorderStyle. 如果FormBorderStyle设置为Sizable,则不会出现此问题。但是请注意,FormBorderStyle.None我的边框样式是必要的,所以我还没有找到解决方案。

0 投票
2 回答
1471 浏览

python - WxPython,在简单的 GUI 中使用缓冲 DC 和面板刷新(转速计数器和条形图)

我刚刚开始用 Python 编程,因此尝试了一个简单的 GUI,它由一个仪表(转速计数器)和一个条形图组成。这一切都有效(代码附在下面)。但是,由于屏幕刷新(Windows XP),我的闪烁非常严重。我知道我需要使用缓冲 DC,但是我无法从所有帖子中找出我实际需要做的事情。

但是我的假设是:

  1. 最初为缓冲图像创建一个内存 DC 以“驻留在”其中,然后
  2. 实例化缓冲 DC
  3. 将 On Paint 绑定到缓冲 DC。

为了提供相关的仪表面(比例),我在 Autocad 中将其全部绘制出来,然后将其转换为 jpg (HMIV0.2.bmp),条形图和仪表指针叠加在上面。

正如您会注意到的,我在循环结束时使用了 Refresh,我想知道这是否是“不好的做法”。然而,我的目的是让程序自由运行并在每次循环时“获取”相关值(转速)。因此没有外部事件来触发绘制。

任何正确方向的建议或指针都非常感谢......我购买了 Cody Precord 的“Wx.Python 2.8 Application Development Cookbook”,希望能得到一些启发,但唉。

0 投票
1 回答
261 浏览

c# - 如何仅在 .net Forms 2.0 CF 中绘制可视内容

我目前有一个带有可滚动面板的表单,它可能包含 100 多个子控件(任何时候只有大约 10 个可以在屏幕上查看)

这会在滚动时导致大量闪烁。

我一直在研究一些双缓冲技术,但它们在我的情况下不起作用,因为我使用了几个子控件(按钮、标签、复选框)并且它们都是独立绘制的。我不能在面板的 OnPaint 方法中做任何影响孩子的事情。

我读过的几个答案指出,添加现有控件需要更多资源,而不是说,而不是标签,只是在顶部绘制一个带有文本的彩色方块。

我有两个主要问题:

  • 如果我不再使用子控件,而只是在面板的 OnPaint 中绘制所有内容,我如何才能仅绘制当前可见的内容(考虑到用户可以滚动)
  • 我将如何实现复选框之类的功能?
0 投票
0 回答
388 浏览

c# - 绘制图像时状态条上的红十字会

我正在尝试非常快速地多次更改状态条上的标签图像。我收到 ArgumentOutOfRangeException。我已经在标签和状态条以及 OnPaint 覆盖的绘制事件中添加了捕获,但我未能捕获它。例外总是伴随着一个红十字代替状态条。

这是更改图像的代码。每次从串行连接接收数据时都会调用它。目标是在接收到数据时闪烁灯。图像为 16 像素 x 16 像素。


0 投票
1 回答
1188 浏览

c# - 从 System.Windows.Forms.ProgressBar 派生的类没有得到它的覆盖 OnPaint

我创建了一个派生自 System.Windows.Forms.ProgressBar 的类。我遵循了 MSDN 建议的方法:

  • 将用户控件添加到您的项目
  • 打开用户控件的代码
  • 不是从 System.Windows.Forms.UserControl 派生,而是从 ProgressBar 派生。

此外,我重写了 OnPaint,因此我可以自己绘制它:

然而这个函数永远不会被调用。断点不会在这里中断。进度条正常绘制。我错过了什么?

0 投票
1 回答
9285 浏览

c# - 在 Windows 窗体中创建带有圆角的自定义 ComboBox

我想创建一个带有圆角和渐变颜色的自定义组合框。我Button通过覆盖该OnPaint方法实现了相同的功能。但它不适用于ComboBox. 任何帮助将不胜感激。

我用于覆盖的代码OnPaint如下:

0 投票
0 回答
1479 浏览

c# - 暂停布局恢复布局

我有一个带有流布局面板的用户控件。这个控件可以有一个或多个相同的控件。此层次结构可以增长到许多级别。

最初我正在添加根控件。然后将控件添加到根控件(流布局面板)。

实际添加控件的代码(ContainerControl 类)。

问题是,我有多个级别的控件。但似乎根容器内的直接容器没有正确调整大小。因此节点被部分显示。如果我启用用户控件的 AutoResize 属性,则用户控件正在调整大小但闪烁不良。

有什么方法可以强制 contrpls 立即调整大小。我尝试在表单和用户控件中暂停布局

修复: 我实际上并没有解决这个问题。我启用了自动调整大小属性为真。这会在表单加载期间导致严重的闪烁。

为了减少闪烁,我在表单中添加了以下代码。

一旦加载了所有控件,这将显示表单。所以在表单加载之前会有一个初始延迟。