Мой ComboBox выглядит плохо, когда его DrawMode не нормальный - PullRequest
6 голосов
/ 12 июня 2011

Когда для ComboBox DropDownStyle имеет значение DropDownList, а DrawMode имеет значение Normal - это выглядит хорошо, но когда я изменяю DrawMode на OwnerDrawFixed - это выглядит очень плохо (аналогично TextBox со стрелкой для раскрывающегося списка).Есть ли какое-нибудь решение, чтобы оно выглядело хорошо, когда DrawMode не Normal?

выглядит так: looks like that

Я хочу, чтобы это выглядело так: I want it to look like that

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Я нашел решение в VB здесь: как сделать комбо-ящик, сделанный на заказ-владелец, снять-выглядит-как-будто-3d-как-стандартный комбо Добавлен код для рисования текста и стрелок. Работает :) 1003 *

class MyComboBox: ComboBox
{
    public MyComboBox()
    {
        this.SetStyle(ControlStyles.Opaque | ControlStyles.UserPaint, true);
        Items.Add("lol");
        Items.Add("lol2");  
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        if (DroppedDown)
            ButtonRenderer.DrawButton(CreateGraphics(), new System.Drawing.Rectangle(ClientRectangle.X - 1, ClientRectangle.Y - 1, ClientRectangle.Width + 2, ClientRectangle.Height + 2), PushButtonState.Pressed);
        else
            ButtonRenderer.DrawButton(CreateGraphics(), new System.Drawing.Rectangle(ClientRectangle.X - 1, ClientRectangle.Y - 1, ClientRectangle.Width + 2, ClientRectangle.Height + 2), PushButtonState.Normal);
        if (SelectedIndex != -1)
        {
            Font font;
            if (SelectedItem.ToString().Equals("lol"))
                font = new Font(this.Font, FontStyle.Bold);
            else
                font = new Font(this.Font, FontStyle.Regular);
            e.Graphics.DrawString(Text, font, new SolidBrush(Color.Black), 3, 3);
        }
        if (DroppedDown)
            this.CreateGraphics().DrawImageUnscaled(new Bitmap("c:\\ArrowBlue.png"), ClientRectangle.Width - 13, ClientRectangle.Height - 12);
        else
            this.CreateGraphics().DrawImageUnscaled(new Bitmap("c:\\ArrowGray.png"), ClientRectangle.Width - 13, ClientRectangle.Height - 12);
        base.OnPaint(e);
    }

Я не знаю, как убрать мерцание, когда мышь входит в ComboBox и покидает его. Когда DoubleBuffering включен, ComboBox черный. Но у меня отлично работает.

0 голосов
/ 12 июня 2011

когда вы изменяете его на OwnerDrawFixed, вы должны обрабатывать рисунок самостоятельно

        private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
                {
                    //Wrtie your code here
     e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), this.Font, Brushes.Black,e.Bounds);
e.DrawBackground();

                }

См. Эту ссылку Класс ComboBoxRenderer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...