Остановить подсветку цвета выбранного элемента в ComboBox? - PullRequest
7 голосов
/ 20 октября 2011

Я использую поле со списком в WinForm, но когда я выбрал любой элемент в поле со списком, цвет фона выбранного элемента синий.Я хочу удалить этот синий цвет фона (особенно при загрузке формы, попытался установить фокус на другой элемент управления в форме, но комбо-подсветка не удалена), но элемент должен быть выбран.

Кто-нибудь может помочь в этом ...?

Ответы [ 6 ]

3 голосов
/ 20 октября 2011

Похоже, что единственный способ сделать это - создать подкласс элемента управления со списком.

Вот пример, где кто-то делает это:

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/e234c4a7-0cf7-4284-a072-8152f7593002/

В Интернете, вероятно, есть еще что-то, что поможет вам.

2 голосов
/ 23 августа 2015

Чтобы решить то же самое, я попробовал почти ВСЕ:

  • , установив для свойства DropdownStyle DropdownList
  • this.BeginInvoke(new Action(() => { comboBox1.Select(0, 0); }));
  • combobox1.SelectionLength = 0;
  • изменение comboBox.TabIndex
  • Не пробовал SendKeys.Send("{ESC}");, потому что это не надежное решение

Ничего не помогло.Возможно, потому что у меня нет элементов в списках, только изображения.Единственным стабильным и рабочим решением было перенести фокус на другой элемент управления Label:

    label.Focus();

Вы также можете скрыть эту метку.

2 голосов
/ 18 июля 2014

Я не большой пользователь VB и играю с ним только в Excel, но у меня также была эта проблема, когда в моем ComboBox был сделан выбор. Наконец-то я нашел способ избавиться от синей подсветки текста.

У меня есть ComboBox на пользовательской форме. Выбор ComboBox и просмотр свойств, просто изменив «HideSelection» на True, сработал для меня. Вы также можете написать код: ComboBox1.HideSelection = True

2 голосов
/ 20 октября 2011

Я нашел что-то на этом сайте

Создайте таймер и включите его в своем событии SelectedIndexChanged, а в таймере просто добавьте ComboBox1.Select(0,0), это должно удалить часть выбора и затем отключитьтаймерОпределите другие точки входа, где вы можете Enable таймер снова

Фрагмент кода

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
    //Get the item selected in the combobox
    ComboBox cbx = (ComboBox)sender;
    int idx = cbx.SelectedIndex;    
    string s1 = cbx.SelectedItem.ToString();
    // Enable the time so that the Highlight can be removed
    timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
    // Remove the Highlight
    comboBox1.Select(0, 0);
    // Disable timer
    timer1.Enabled = false;
}
1 голос
/ 15 февраля 2012

Есть простое решение для вас

private void myComboBox_Paint(object sender, PaintEventArgs e)
{
     myComboBoxComboBox.SelectionLength = 0;
}

надеюсь, это поможет :)

0 голосов
/ 19 мая 2016

Я столкнулся с той же проблемой, и после того, как я не нашел рабочего решения, у меня возникла та же идея, что и у @Vadim K.

Вот краткий пример.

Первый шаг - изменитьфокус в событии UI_Load.

Private Sub UI_Load(sender As System.Object, e As System.EventArgs) Handles Me.Load    
    Me.lblTitle.Focus()
End Sub

Следующим шагом является обработка случая, когда кто-то выбирает новое значение

Private Sub comboExportDates_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboExportDates.SelectedIndexChanged
        Me.lblTitle.Focus()
End Sub

У меня отлично работает

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