0

アイテムの高さを上げるために、次のコードを記述しました。これが行われると、コンボをスクロールしながら、通常のコンボボックスと比較して非常に高速で移動します。この問題を解決するにはどうすればよいですか?

描画モードをDrawMode.OwnerDrawFixedとして設定しました。

 private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
    {           
        e.DrawBackground();
        System.Diagnostics.Debug.WriteLine(e.State);
        if (e.Index < 0)
        {
            return;
        }       
        SizeF stringMeasure = e.Graphics.MeasureString(this.Items[e.Index].ToString(), e.Font);
        Rectangle rec = new Rectangle(e.Bounds.Left, e.Bounds.Top + ((e.Bounds.Height - ItemHeight)/2 ), e.Bounds.Width, ItemHeight);
        e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, new SolidBrush(this.ForeColor), rec);
        e.DrawFocusRectangle();
    }

    private void comboBox1_MeasureItem(object sender, MeasureItemEventArgs e)
    {
        e.ItemHeight = this.ItemHeight * 2; ;
    }
4

1 に答える 1

0

MeasureItem イベントは、DrawMode が OwnerDrawVariable に設定されている場合にのみ呼び出されます。

したがって、DrawMode を OwnerDrawVariable に変更するか、ComboBox の ItemHeight プロパティを次の値に設定する必要があります。this.ItemHeight * 2

スクロール速度についてはわかりません。それはオペレーティングシステムにある可能性があります。違いはあまりわかりませんでした —stringMeasure変数を使用していないので、コメントアウトしてください。

于 2013-02-22T15:06:52.960 に答える