お世話になります。

C#にて、配置したListBoxをオーナードローさせることで、簡単なアニメーションを
させようとしています。現在選択中のセルの中にのみアニメーションをさせればと
やっていますが、TimerでRefreshをさせるたびにListBoxがちらついてしまいます。

当然と言えば当然なのですが、そのあとDoubleBufferedをTrueにしてみたり
OnPaintBackgroundを空でオーバーライドしてみたりやってみたのですが、
どうしてもちらつきが出てしまいます。

ちらつきをせずにアニメーションをさせる方法はありますでしょうか。

下記がそのコードです。

public class AnimeList : ListBox
{
    private Timer timer = new Timer();

    private int iXpos = 0;

    public TunesList()
    {
        this.ScrollAlwaysVisible = true;
        this.Font = new Font("メイリオ", 8, FontStyle.Regular);
        this.ItemHeight = 20;
        this.DrawMode = DrawMode.OwnerDrawFixed;
        this.DrawItem += new DrawItemEventHandler(this.listBox1_DrawItem);
        this.DoubleBuffered = true;

        this.timer.Interval = 100;
        this.timer.Tick += new System.EventHandler(this.timer1_Tick);
        this.timer.Enabled = true;
    }
    /// <summary>
    ///     セルの描画
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        if (this.DesignMode)
        {
            return;
        }
        //ListBoxが空のときにListBoxが選択されるとe.Indexが-1になる
        if (e.Index < 0)
        {
            return;
        }

        //描画する文字列の取得
        string s = ((ListBox)sender).Items[e.Index].ToString();

        e.DrawBackground();


        Brush b = null;

        //  選択されていないセル
        if ((e.State & DrawItemState.Selected) != DrawItemState.Selected)
        {
            e.Graphics.FillRectangle(Brushes.Black, e.Bounds);
            b = new SolidBrush(Color.White);
            //文字列の描画
            e.Graphics.DrawString(s, this.Font, b, e.Bounds.X + 4, e.Bounds.Y);
        }

        //  選択中のセル
        else
        {
            e.Graphics.FillRectangle(Brushes.White, e.Bounds);
            b = new SolidBrush(Color.Black);
            //文字列の描画
            e.Graphics.DrawString(s, this.Font, b, e.Bounds.X + 4 + this.iXpos, e.Bounds.Y);
        }

        //後始末
        b.Dispose();

        //フォーカスを示す四角形を描画
        e.DrawFocusRectangle();


    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        this.iXpos -= 2;
        if(this.iXpos < -128)
        {
            this.iXpos = 0;
        }
        this.Refresh();
    }
    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
        // 何もしない
    }
}

以上、よろしくお願いいたします。