3

多数のアイテムを含むSystem.Windows.Forms.ListViewがあります。ちらつきが耐えられないほどだったので(よくあることですが)、検索した後、「ListViewLessFlicker」クラスでこれら2つのことを行うことにしました。

        this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
        this.SetStyle(ControlStyles.Opaque, true);

DoubleBufferingは、これらのトピックの解決策として最も一般的に示されているにもかかわらず、あまり効果がありませんでしたが、スタイルを不透明に設定すると、ちらつきが大幅に減少しました。
http://www.virtualdub.org/blog/pivot/entry.php?id=273

しかし、それは私が修正を見つけることができないように見える副作用を持っていました。ListViewの項目にマウスを合わせると、テキストが太字になり、非常にぼやけます(不透明度がtrueでない限り、これは発生しません)。

これは非常に拡大された例です。

ここに画像の説明を入力してください

誰かが修正を持っているか、なぜそれがこれをしているのか知っているなら、私は知りたいです!

4

2 に答える 2

5

私は通常これを行います-コントロールのサイズを変更するときのちらつきを減らします。アイテムをまとめて追加するときのちらつきを減らすには、 BeginUpdate()/を使用する必要があります。EndUpdate()何がぼやけを引き起こすのかわからないので、それについてアドバイスすることはできません-あなたのビデオドライバを更新することは役立つかもしれませんが、あなたの希望を高く保持しないでください。

[System.ComponentModel.DesignerCategory ( "" )]
public partial class ListViewEx : ListView
{
    private const int WM_ERASEBKGND = 0x14;

    public ListViewEx ()
    {
        InitializeComponent ();

        // Turn on double buffering.
        SetStyle ( ControlStyles.OptimizedDoubleBuffer |
            ControlStyles.AllPaintingInWmPaint, true );

        // Enable the OnNotifyMessage to filter out Windows messages.
        SetStyle ( ControlStyles.EnableNotifyMessage, true );
    }

    protected override void OnNotifyMessage ( Message oMsg )
    {
        // Filter out the WM_ERASEBKGND message to prevent the control
        // from erasing the background (and thus avoid flickering.)
        if ( oMsg.Msg != WM_ERASEBKGND )
            base.OnNotifyMessage ( oMsg );
    }
}
于 2012-09-28T10:55:50.203 に答える
3

私はあなたと同じ問題を抱えていて、このページのコメントで解決策を見つけました: http ://www.virtualdub.org/blog/pivot/entry.php?id=273

次のような新しいクラスを作成する必要があります。

public class BufferedListView : ListView
{
    public BufferedListView() : base()
    {
        SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
    }
}

次に、ListViewを次のようにBufferedListViewとして定義します。

ListView myListView = new BufferedListView();

その後、ぼやけたテキストはもう問題ではありません;)

于 2012-11-27T20:54:20.547 に答える