【问题标题】:How do i update the paint event after an X or Y position has changed? [duplicate]如何在 X 或 Y 位置更改后更新绘制事件? [复制]
【发布时间】: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


【解决方案1】:

您需要告诉系统在更新变量后需要重新渲染表单:

this.Invalidate()

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多