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();
}

したがって、2 つの方法の違いは次のとおりです。

Control.Update()

Update() 関数は、ウィンドウの更新領域が空でない場合に (コントロールの) ウィンドウに WM_PAINT メッセージを送信することによって、コントロールのクライアント領域を更新する UpdateWindow 関数を呼び出します。この関数は、アプリケーション メッセージ キューをバイパスして、WM_PAINT を WNDPROC() に直接送信します。

したがって、ウィンドウ更新領域が以前に「無効化」されている場合、「update」を呼び出すと、無効化が即座に「更新」(および再描画) されます。

Control.Refresh()

Refresh() は Invalidate(true) を呼び出してコントロールとその子を無効にし、次に Update() を呼び出してコントロールを強制的に描画し、無効化が同期されるようにします。

これが役立つことを願っています。

于 2012-11-23T11:41:39.037 に答える