Значение ComboBox показывает конечную часть после выбора элемента

У меня есть ComboBox в моей С# Winform. Некоторые тексты элементов больше, чем размер ComboBox. Всякий раз, когда я выбираю эти значения, конечная часть видна. Как я могу убедиться, что показана начальная часть.

Например,

Рассмотрим элементы: {"маленький","большой текстовый выбор"}

Теперь поле со списком достаточно велико, чтобы отображать 8 символов. Когда я выбираю "большой выбор текста",

Я вижу только "выборы", но вместо этого я хотел бы видеть "большой текст".


person Shamim Hafiz    schedule 03.03.2011    source источник
comment
Рассматривали ли вы возможность увеличить поле со списком больше?   -  person Cody Gray    schedule 03.03.2011
comment
это возможно, но я хотел знать, как я могу добиться того, что упоминается в вопросе.   -  person Shamim Hafiz    schedule 03.03.2011


Ответы (3)


Для вас важно использовать DropDownStyle равным DropDown? В этом стиле со списком есть редактор, поэтому, когда вы выбираете новое значение из списка, оно отображается в редакторе, а положение курсора устанавливается в конце текста. Таким образом, в этом случае вы должны отправить код кнопки HOME в редактор выпадающего списка, это переместит курсор в начало строки. Вы можете сделать это, как показано ниже:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SendKeys.Send("{HOME}");
    }

Но если стиль DropDown не важен для вас, просто измените его на DropDownList, и вы получите желаемое поведение.

person Anton Semenov    schedule 03.03.2011
comment
Это соответствует тому, чего я хотел достичь. - person Shamim Hafiz; 17.03.2011

В событии SelectedIndexChanged создайте таймер:

Timer timer = new Timer();
timer.Interval = 10;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();

И в своем Tick:

void timer_Tick(object sender, EventArgs e)
{
    comboBox1.Select(0, 0);
    (sender as Timer).Stop();
    (sender as Timer).Dispose();
}

Вызов Select достигнет того, что вам нужно.

person Shadow Wizard Wearing Mask V2    schedule 03.03.2011
comment
Вау, это некрасиво. Для чего нужен таймер в первую очередь? - person Cody Gray; 03.03.2011
comment
comboBox1.Select(0, 0), этот код, похоже, не служит цели. - person Shamim Hafiz; 03.03.2011
comment
@Gunner: Работал на меня. Таймер нужен, потому что изменение выбора текста непосредственно в событии SelectedIndexChanged действительно не имеет никакого эффекта, вероятно, потому, что автоматический выбор текста (который вызывает проблему, которую вы описываете) происходит после этого события. - person Shadow Wizard Wearing Mask V2; 03.03.2011

Вы также можете посмотреть на динамическое расширение значения или использовать всплывающую подсказку для больших элементов.

Я объяснил это здесь, как это сделать для Listbox:

http://blogs.msdn.com/b/sajoshi/archive/2010/06/15/asp-net-mvc-creating-a-single-select-list-box-and-showing-tooltip-for-longy-items.aspx

person sajoshi    schedule 03.03.2011