10

(とりわけ) テキスト ボックス コントロールを含む C# (VS2010) でフォームを作成しました。テキストボックスには、ある時点で大量のデータが含まれる場合があります (~300 万文字)。

フォームをスクロールまたは移動しても問題は発生しませんが、フォームを最小化して元に戻すと、再描画シーケンス (私は信じています) がトリガーされ、フォームが再描画されるまでに約 5 ~ 10 秒の大きな遅延が発生します。

私はすでにいくつかの解決策を試しました:

  1. ダブル バッファの使用 - 私が読んだ内容によると、ダブル バッファリングはフォーム自体にのみ適用され、そのコントロールには適用されません。

    this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true);

  2. を使用して最小化したらテキストボックスの再描画を無効にし、SendMessage(this.my_textBox.Handle, WM_SETREDRAW, false, 0); フォームが復元された後に有効に戻します。テキストボックスの repaint を再度有効にしないと、フォームの再描画ラグも存在することに気付きました。

  3. ビットマップを使用した手動ダブル バッファ – #1 と同様の結果。

この問題は、データ量を縮小または調整しようとしているテキスト ボックス コントロールに関連している可能性があることをどこかで読みましたが、それをオーバーライドできませんでした。

以前、MFC で同じプロジェクトを使用していましたが、再描画や遅延の問題は発生しませんでした。

この問題を解決する方法を教えてください。

4

2 に答える 2

1

問題を発見!!! 問題はテキストボックスのアンカー プロパティに関連していました。それを削除すると、ウィンドウの復元はすぐに行われました。ところで、新しいカスタム クラスは必要ありません

于 2013-01-07T20:33:31.120 に答える
0

私が何かを理解していない可能性があります (または、これを行うことができない理由があるかもしれません) が、独自の TextBox クラスをそのまま派生させることはできませんか?

public class MyTextBox : TextBox
{
    public MyTextBox() : base()
    {
        SetStyle(ControlStyles.AllPaintingInWmPaint |
            ControlStyles.OptimizedDoubleBuffer, true);
        SetStyle(ControlStyles.ResizeRedraw, false); 
    }
}

そして、それを通常のテキストボックスの代わりに使用しますか?

于 2013-01-02T22:03:53.163 に答える