Ответ 1
Мне удалось выполнить это, чтобы переопределить событие OnPaint моего элемента управления/окна и сделать
combobox1.SelectionLength = 0;
У меня есть поле со списком криптонов, с которым я связываю данные со списком пар ключ-значение. Что происходит, когда я устанавливаю выделенный элемент в коде, он выделяет текст. Как я могу предотвратить это или отменить выбор текста?
Я пробовал следующее:
// 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;
Кажется, что ничего не работает. Любая помощь приветствуется.
Мне удалось выполнить это, чтобы переопределить событие OnPaint моего элемента управления/окна и сделать
combobox1.SelectionLength = 0;
Возможно, я нашел решение, которое работает:
Если вы используете форму, подпишитесь на форму Shown.
ИЛИ
Если вы используете UserControl (например, я), вы можете подписаться на событие VisibleChanged.
В этом случае вы можете сделать следующее:
foreach (ComboBox cbo in (this.Controls.Cast<Control>().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
{
cbo.SelectionLength = 0;
}
В стороне:
Мне пришлось сделать это для пользовательского элемента управления, в котором я добавил ComboBoxes в элемент управления, а затем для более быстрого динамического задания их размера. Установка размера вызвала подсветку, с которой сталкивался OP.
Попробуйте это
combo.SelectedText = String.Empty;
Относительно вашей проблемы с фокусом: (MSDN)
Когда поле со списком теряет фокус, точка выбора перемещается в начало текста, и любой выделенный текст становится недоступным
Так странно; почему следующее не сработало:
anotherControl.Focus();
Вам просто нужно поместить этот код в сгенерированное событие или нажать кнопку, где вы хотите отменить выбор текста в Combo Box
ComboBox1.SelectedItem = null;
Я знаю, что прошло некоторое время с тех пор, как вы задали этот вопрос. Но вот что вы можете сделать
combo.selectedindex = -1;
В событии SelectedIndexChanged добавьте таймер, который будет выполняться только один раз через 10 миллисекунд.
new System.Threading.Timer((s) =>
{
comboBox1.Invoke(new Action(() =>
{
comboBox1.Select(0, 0);
}));
}, null, 10, System.Threading.Timeout.Infinite);
Не уверен, что вы могли бы делать в фоновом режиме, т.е. уволенные события и т.д. Однако в событии combox selectedexexchanged вы можете добавить anotherControl.Select().
Это должно:)
Вот что я делаю:
private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.ActiveControl = cancelButton;
}
Вы не указали, должен ли пользователь редактировать значения ComboBox или нет. Если нет, то DropDownStyle
для ComboBox следует установить в ComboBoxStyle.DropDownList
. Таким образом, ComboBox разрешит только выбирать существующие значения, пользователи не смогут вводить новые значения, и текст никогда не будет выделен.
эти 3 строки помогли мне:
cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;
TabIndex должен быть не первым, так что это не первый элемент в форме
В моем случае выбор появился после изменения размера. Это решило это:
textBox.Resize += (sender, args) =>
{
Control c = sender as Control;
if (c == null || c.Parent == null)
return;
c.Focus();
c.Parent.Focus();
};
Подпишитесь на событие "SelectedIndexChanged", задача которого - установить фокус ComboBox.
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Focus();
}
Подпишитесь на событие "Краска" из основной формы. Отмена выбора происходит в этом обработчике события:
private void MainForm_Paint(object sender, PaintEventArgs e)
{
comboBox1.SelectionLength = 0;
}
"Выбрать" не работает для меня. Но я нашел очень простой трюк. Добавьте это право в SelectedIndexChanged-Event:
comboBox1.Hide();
comboBox1.Show();
У меня работает.
Я знаю, древний пост, древние технологии, но этот уродливый путеводитель работал на меня:
cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };
Мне все равно, сколько ему лет. Мы строим базу знаний.
Я использую D5 (и, возможно, предыдущие версии совпадают). Вам необходимо использовать:
Combobox.SelLength := 0;
Кроме того, если это не сработает, выполните следующее: Избегайте стиля по умолчанию (csDropDown). И установите для этого:
Combobox.Style := csDropDownList;
как предложил Алекс.
Спасибо. Прекрасно работает!