【发布时间】:2019-11-29 23:58:35
【问题描述】:
目前,我的屏幕左上角会出现一个红色的小框,我有一些代码可以通过按键监听器增加和减少各自变量的值。问题是当我更改 X 和 Y 的变量值时,它不会在屏幕上显示该更改,无论如何它都停留在角落里。
更新表单显示以在移动时显示红色框的解决方案是什么?是否有更有效的方法使其仅在按下键后才更新显示?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MovingObject
{
public partial class ObjectMove : Form
{
public ObjectMove() => InitializeComponent();
public void FillRectangleRectangle(PaintEventArgs e) {
SolidBrush blackPen = new SolidBrush(Color.Red);
Rectangle rect = new Rectangle(x: Program.XCoord ,y: Program.YCoord, 10, 10);
e.Graphics.FillRectangle(blackPen, rect);
}
protected override void OnPaint(PaintEventArgs e) {
FillRectangleRectangle(e);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Up)
{
Program.YCoord+=10;
}
if (keyData == Keys.Down)
{
Program.YCoord-=10;
}
if (keyData == Keys.Left)
{
Program.XCoord-=10;
}
if (keyData == Keys.Right)
{
Program.XCoord+=10;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
【问题讨论】:
-
您可以尝试将
base.OnPaint()添加到OnPaint(PaintEventArgs e)。不确定是不是它导致了问题,但至少它是覆盖OnPaint方法的正确方法,所以尝试一下不会有坏处。 -
出于好奇,base.OnPaint() 实际上会导致它在没有它的情况下显示吗?
-
它调用
OnPaint()的基类(Form)实现。这是替换现有实现(不调用base.OnPaint())与扩充它(调用base.OnPaint())的问题。根据@EugenePodskal 的文档链接,继承者(即您)应该调用基本实现。
标签: c# .net winforms paint repaint