Як скасувати вибір тексту комбобок

У мене є комбінований кріптон, яким я зв'язую дані зі списком пар ключ-значення. Що відбувається, коли я встановлюю вибраний елемент у коді, він підкреслює текст. Як я можу запобігти цьому або скасувати вибір тексту?

Я спробував наступне:

// 1
combo.Select(0,0);
// 2
combo.Focus();
anotherControl.Focus();
// 3
combo.SelectionStart = 0;
combo.SelectionLength = combo.Text.Length;
// 4 
combo.SelectionStart = combo.Text.Length;
combo.SelectionLength = 0;

Нічого, здається, не працює. Будь-яка допомога цінується.

16

12 Відповіді

Я спромігся виконати це, щоб запобігти події OnPaint мого контролю/вікна та робити

combobox1.SelectionLength = 0;
6
додано
Роблячи це і не можу виділити текст пізніше. Його отримання відбирається щоразу, оскільки метод OnPaint часто називається
додано Автор Martin Fernau, джерело

Я, можливо, знайшов рішення, яке працює:

Якщо ви використовуєте форму, підпишіться на події "Показана форма".

АБО

Якщо ви використовуєте UserControl (як я), ви можете підписатися на подія VisibleChanged.

У такому випадку ви можете виконати наступне:

        foreach (ComboBox cbo in (this.Controls.Cast().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
        {
            cbo.SelectionLength = 0;
        }

Як сторона:

Я в кінцевому підсумку мав це зробити для управління користувачем, в якому я додав ComboBoxes до елемента керування, після чого потім потрібно було динамічно встановити їх розмір. Встановлення розміру зумовило висвітлення, з яким зіткнувся OP.

3
додано
Це теж працювало для мене. Чудово
додано Автор Martin Fernau, джерело

Спробуй це

combo.SelectedText = String.Empty;

Що стосується вашої проблеми з фокусуванням: ( MSDN )

Коли комбінат втрачає фокус, то точка вибору переміщається до   початок тексту і будь-який обраний текст стає невибраним

Так дивно; чому наступне не працювало:

anotherControl.Focus(); 
2
додано
Не працюй. Може бути, ця відповідь актуальна для старих C #.
додано Автор Gurebu Bokofu, джерело
Спасибі, але не працював
додано Автор MattBH, джерело
це дивно, коли я натискаю на нього після завантаження, а потім клацніть на щось інше тоді, що фокус справа працює! ??! це веде мене гайками
додано Автор MattBH, джерело
це пов'язано, але я потім вибираю елемент зі списку. Це в основному форма, яка попередньо завантажується з db, тому мені потрібно вибрати правильний елемент.
додано Автор MattBH, джерело
чи є ваша комбінація пов'язана з деяким джерелом даних? Якщо так, спробуйте SelectedIndex = -1
додано Автор sll, джерело

Мені все одно, як це старіє. Ми створюємо базу знань.

Я використовую D5 (і, можливо, попередні версії однакові). Вам потрібно використовувати:

Combobox.SelLength :=  0; 

Крім того, якщо це не спрацює, це робиться: уникати стилю за замовчуванням (csDropDown).   І встановіть його на:

Combobox.Style := csDropDownList; 

як запропонував Алекс.

Дякую. Працює чудово!

1
додано
D5? Ви маєте на увазі Delphi? У темі [C #], позначеному тегом?
додано Автор jean, джерело
Вибачте, але синтаксис, який ви показали тут, не виглядає як C# взагалі.
додано Автор kayess, джерело

Ось що я роблю:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
     this.ActiveControl = cancelButton;
}
0
додано
this.ActiveControl = null; також працює.
додано Автор Alden, джерело

У випадку SelectedIndexChanged додайте таймер, який буде виконуватися лише один раз через 10 мілісекунд.

new System.Threading.Timer((s) =>
            {
                comboBox1.Invoke(new Action(() =>
                {
                    comboBox1.Select(0, 0);
                }));
            }, null, 10, System.Threading.Timeout.Infinite);
0
додано

Я знаю, що це був час, оскільки ви запитали це питання. Але ось що ви можете зробити

combo.selectedindex = -1;
0
додано
Спасибі, але я не намагаюся змінити вибраний елемент, я просто хочу вимкнути текст.
додано Автор MattBH, джерело

Ви не вказали, чи повинен користувач змінювати значення ComboBox, чи ні. Якщо ні, то DropDownStyle ComboBox слід встановити на ComboBoxStyle.DropDownList . Таким чином, ComboBox дозволить вибирати існуючі значення, користувачі не зможуть вводити нові значення, і текст ніколи не буде виділений.

0
додано

ці 3 лінії допомогли мені:

cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;

TabIndex має бути не першим, так що це не перший елемент у формі

0
додано
У мене є така ж проблема, що й ОП, і це не допомогло
додано Автор Martin Fernau, джерело

Не впевнені, що ви можете робити у фоновому режимі, тобто стріляли події тощо. Однак у вибраній коробці індивідуально зміненої події можна додати anotherControl.Select ().

Це має бути :)

0
додано
Ні, не працював.
додано Автор MattBH, джерело

Вам просто потрібно помістити цей код на породжену подію або кнопку, де ви хочете скасувати вибір тексту Combo Box

ComboBox1.SelectedItem = null;
0
додано
так! добре, спасибі @ шивам
додано Автор Murtuza Khan, джерело

У моєму випадку вибір з'являється після зміни розміру. Це вирішило це:

textBox.Resize += (sender, args) =>
{
    Control c = sender as Control;
    if (c == null || c.Parent == null)
        return;

    c.Focus();
    c.Parent.Focus();
};
0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug