问题标签 [paintevent]

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 投票
1 回答
2381 浏览

c# - C#.NET .. 在 Paint 事件处理程序之外绘制是一种不好的做法吗?

为了澄清我的问题的意思。我在使用 .NET 框架在 C# 中制作游戏时习惯于实现我自己的 DrawScene() 方法,并在我想重绘游戏图形时调用它(基本上是在任何实例之后游戏已经移动或改变了它的形状/状态),如下所示:

通过这样做,在我的 Paint 事件处理程序中,我所做的一切如下:

例如,当我想在玩家移动后重绘时,我只需以相同的方式调用 DrawScene():

这样做或这样做之间有什么严重的区别(我注意到大多数人都遵循):

抱歉,如果这话太多了,但我只是想澄清一下我的问题..

因此,如果上述两种情况的绘图方式完全相同(从图形的角度来看),并且像第一种情况一样保持我通常的实现没有任何危害。那么什么时候最好使用 invalidate() 方法?

0 投票
0 回答
1395 浏览

c# - 调用 Invalidate() 时不触发 Paint 事件

我正在开发一个 WPF 应用程序,该应用程序在WindowsFormHost. 面板包含需要经常重绘的图形,绘制这些图形的代码位于OnPaint()事件中。问题是,该OnPaint()事件似乎永远不会触发。为了调试,我在表单中添加了一个按钮,并使用该按钮的单击事件处理程序来调用 Invalidate() 事件。即使我打电话Invalidate(),我似乎也无法触发 Paint 事件。我的代码隐藏如下所示:

我的 XAML 看起来像这样:

我已阅读此内容:WindowsFormHost Paint Event Not Firing

...但我们似乎没有遇到同样的问题,因为我的 XAML 确实引用了我的 Paint 事件处理程序,OnPaint()但仍然没有触发。

myPanel.Update()我已经尝试Button_Click在对myPanel.Invalidate(). 那也行不通。

我在这里做错了什么?这可能Invalidate()不是真的无效吗?

0 投票
4 回答
1107 浏览

c# - 如何将滚动添加到面板

基本上,我创建了面板类的扩展,它在自身上添加了多个位图,以创建多个五线谱。我尝试在面板上添加一个垂直滚动条,但没有奏效。我的 Paint 过程与此类似

0 投票
1 回答
227 浏览

c# - 如何使用 trackBar 中的值实时重绘一条线?

我只是想知道你是否可以帮助我解决这个问题。

在我的程序中,我必须使用绘画事件来绘制一条充当“炮塔”的线。我必须使用轨迹栏来选择我将“开火”这个炮塔的角度。我的问题是我不确定如何对其进行编码,以便每次更改轨迹栏中的值时都会重绘“炮塔”线。我尝试使用 Refresh(),它允许实时绘制线条,但它导致表单黑白闪烁,并以不同角度重新绘制线条与所选内容。

任何帮助将不胜感激。谢谢!

这是表单的屏幕截图,来自以下在 Visual Basic 2010 中运行的代码

0 投票
1 回答
4921 浏览

c# - C# - 使用“Paint”在面板中绘图

我一直在为一个需要在屏幕上显示多边形(在面板中绘制)上显示的类项目工作,但我一直在这里阅读我应该使用 Paint 事件,但我不能让它工作(不久前开始学习 C#)。

我正在做这样的事情来在屏幕上绘制它,可以使用 Paint 方法来做到这一点吗?(它被称为方法或事件?我真的迷路了)。

谢谢!

0 投票
0 回答
202 浏览

c# - 应用程序如何崩溃?C#

进入页面后,我使用刷新方法重绘控件。如果我查看任务管理器,我可以看到最初是 40.000K 内存,进入另一个页面后它将是 50.000,依此类推,但在达到 100-130 或更多之后,在某些页面之后它又会是 100。

我只创建了第一次 100 个控件,您可以在其中看到图片。如果我尝试转到下一页,它将只更新游戏名称、图片等值。我正在使用 onPaint 事件来绘制控件,而 IDisposable 控件则使用 using()..页码是标签。所有游戏控件都是在 floatLayout.Game 控件中,图片所在的位置。我不调用手动绘制事件,我只是调用刷新或无效方法。在第二个代码中,有时我会得到 nullReference 异常,用于 e.graphics。e.graphics 有时为空.....我不知道为什么会这样。

在此处输入图像描述 在此处输入图像描述

我不知道什么时候,但过了一段时间,每次都不一样。我不知道如何手动使程序崩溃,这种情况突然发生

这是我的两个代码:

我的游戏控制油漆:

我的星控油漆:

0 投票
1 回答
1001 浏览

c++ - Qt5 paintEvent 未在 QScrollArea 内调用

我在使用 Qt 时遇到了一些问题。我正在尝试QRect通过paintEvent为继承QWidget并放置在QScrollArea. 问题是,paintEvent根本不会触发(不是在调整大小事件时,不是在我调用repaint()orupdate()时,也不是在我启动程序时)。这是我超载的地方paintEvent,在GOL.cpp

我的布局如下,在DisplayGame.cpp

老实说,我不知道为什么它不画任何东西。有任何想法吗?

0 投票
1 回答
1824 浏览

c# - 用坐标绘制多边形

我正在尝试用坐标绘制多边形,听起来很简单,但是有一个问题,它没有绘制。我正在使用 Microsoft Blend for Visual Studio 14。

微软 .NET 框架 4.6.01055

3 产生错误。我认为主要的是

CS1061:对象没有“DrawPolygon”的定义。

CS0117:“颜色”没有“黑色”的定义

关于解决这个问题的任何想法?谢谢!

0 投票
0 回答
370 浏览

c++ - QGraphicsProxyWidget 内的 QGraphicsScene 绘制事件

我正在使用 OpenCV 从网络摄像头进行流式传输。每个捕获的帧(类型是cv::Mat)通过自定义信号传输到基于节点的插槽中QGraphicsScene。由于我有一个实际需要显示的单一类型的节点,cv::Mat而其余的只是用于处理数据,我创建了一个查看器小部件,该小部件将cv::Mat数据转换为QImage数据,然后使用paintEvent()在其表面上绘制它:

基于节点的 QGraphicsScene - 内部绘制事件

这是小部件本身的代码:

qcvn_node_viewer.hpp

qcvn_node_viewer.cpp

正如您从上面的屏幕截图中看到的那样,QWidget它嵌入在一个QGraphicsSceneusing 中QGraphicsProxyWidget,以及QGraphicsRectItem我用于在场景中选择/移动节点的一个。

使用QPainter被认为比使用更有效,QLabel并将其设置QPixmap为捕获和转换的帧。QGraphicsScene据我所知,在 a 内使用 OpenGL 视口不是一种选择。处理场景中的绘制事件似乎也处理了QGraphicsItems 和QGraphicsProxyWidgets 内部的本地事件。查看器在其表面上绘制的帧在调用场景的绘制事件处理程序时才会更改(悬停我的一些节点,移动它们等)。

有没有办法来解决这个问题?我即将选择这个QLabel+QPixmap选项(即使我不确定它是否会遇到相同或不同的问题)但首先我想确保我无能为力来保持我目前的方式的做事。


编辑:好的,所以我将查看器更改为使用QLabel而不是小部件的绘制事件,它就像一个魅力。不过,这个问题仍然悬而未决,因为我想知道如何使用本地绘画事件。

0 投票
0 回答
820 浏览

c# - 如何在winform应用程序中使用其绘制事件在父复选框上绘制一个平面复选框?

当用户增加显示的 DPI 时,我的 winform 应用程序中复选框的大小不会自动增加。只有复选框旁边显示的文本大小会增加。为了解决这个问题,我尝试在父级上绘制一个自定义复选框复选框,使用其绘制事件。我正在使用以下命令。 ControlPaint.DrawCheckBox(e.Graphics, rc,chkBx.Checked ? ButtonState.Checked : ButtonState.Normal);问题是这会创建一个 3D 框。但我想绘制一个平面复选框。我该如何实现呢?