0

我有一个设置为使用按钮自动刷新的 Windows 窗体,如下所示:(代码不起作用)怎么办?

折叠 | 复制代码

private void Refresh_Click(object sender, EventArgs e)
{
    this.Refresh();
}
4

2 回答 2

1

此代码肯定会刷新表单。然而,几乎不可能产生任何明显的差异,Windows 和 Winforms 已经非常擅长在没有任何帮助的情况下保持表单更新。您还必须做一些其他事情,这会使表单绘制不同。

一个简单的例子:

    private bool drawMessage;

    private void Refresh_Click(object sender, EventArgs e) {
        drawMessage = !drawMessage;
        this.Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e) {
        if (drawMessage) {
            TextRenderer.DrawText(e.Graphics, "You clicked Refresh", this.Font, Point.Empty, this.ForeColor);
        }
        base.OnPaint(e);
    }
于 2012-11-23T11:53:24.193 回答
1

您拥有的应该刷新该事件所属的当前表单。由于缺乏可理解的信息(发生了什么以及为什么说它不起作用?等等),很难弄清楚您的问题是什么。但是,您可以尝试

private void Refresh_Click(object sender, EventArgs e)
{
    this.Update();
}

因此,这两种方法的区别在于:

控制.更新()

如果窗口的更新区域不为空,Update() 函数调用 UpdateWindow 函数,该函数通过向(控件的)窗口发送 WM_PAINT 消息来更新控件的客户区。此函数绕过应用程序消息队列直接向 WNDPROC() 发送 WM_PAINT。

因此,如果窗口更新区域之前“无效”,那么调用“更新”将立即“更新”(并导致重新绘制)无效。

控制.刷新()

Refresh() 调用 Invalidate(true) 使控件及其子项无效,然后调用 Update() 强制绘制控件,使无效是同步的。

我希望这有帮助。

于 2012-11-23T11:41:39.037 回答