0

アイテムの高さを上げるために、次のカスタムコンボボックスを開発しました。それが完了すると、スクロールバーがあるときにドロップダウンメニューの最後に空白が表示されます。 ここに画像の説明を入力してください どうすれば問題を修正できますか?

class MyComboBoxXX : ComboBox
{
    public MyComboBoxXX():base()
    {
        this.DrawMode = DrawMode.OwnerDrawVariable;
        this.DropDownStyle = ComboBoxStyle.DropDownList;
        this.MaxDropDownItems = 5;
        this.IntegralHeight = false;         
    }

    protected override void OnMeasureItem(MeasureItemEventArgs e)
    {
        e.ItemHeight = 40;
        this.DropDownHeight = 40 * 5;        
    }
    protected override void OnDrawItem(DrawItemEventArgs e)
    {        
        e.DrawBackground();        
        var index = e.Index;    
        if (index < 0 || index >= Items.Count) return;    
        using (var brush = new SolidBrush(e.ForeColor))
        {            
            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();
    }    
}
4

3 に答える 3

2

よく見ると、DropDown領域の上部と下部に1ピクセルの境界線があるように見えます。に2ピクセルを追加することで、スペースを取り除くことができますDropDownHeight

protected override void OnMeasureItem(MeasureItemEventArgs e)
{
    e.ItemHeight = 40;
    this.DropDownHeight = (40 * 5) + 2; //add 2 pixels to include the border
}



結果:
最後にスペースのないコンボボックス

于 2013-02-26T07:54:10.370 に答える
0

DropDownHeight値が、OnMeasureItemメソッドのオーバーライドの最大数よりも少ない場合は、適切な数のアイテムに減らす必要があると思います。

于 2013-02-26T04:00:09.547 に答える
0

DrawModeをNormalから変更すると、アイテムの高さに2ピクセルのパディングが追加されるため、デフォルトのItemHeightを保存する必要があります。ItemHeightを呼び出す前にハンドルを取得する必要があります。これは、ハンドルを作成するためです。これがないと、ItemHeightプロパティの値は正しくありません。 http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/ComboBox.cs

于 2015-02-10T13:53:37.847 に答える