У меня возникла ситуация, когда я хочу изменить выбранное значение поля со списком в приложении Windows Forms, используя Ctrl-Left ori Ctrl-Right. Однако, если combobox является выбранным элементом управления в форме, это не работает. Выбранное значение устанавливается на старое значение после того, как оно установлено на новое значение. Если combobox не является выбранным элементом управления, все работает нормально. В моем приложении комбо может получать фокус, потому что значения также могут быть изменены с помощью мыши. Хотя то, что я хочу, может быть достигнуто путем выбора какого-либо другого элемента управления в форме, прежде чем фактически изменить значение, которое мне не нравится в этом решении.C# combobox selected index changed fires old value
Итак, есть два вопроса: Почему событие selectedIndexChanged запускается со старым значением, если поле со списком является выбранным элементом управления в форме и Как это можно избежать или если я не могу найти подходящее обходное решение? Далее приведен код, иллюстрирующий мою проблему. Если вы снимете поле со списком и поле richtext в форме и скопируете приведенный ниже код в Form1.cs, вы можете увидеть мою проблему. Вам нужно сделать комбо DropDownList стиль и добавить некоторые цифры в качестве элементов (1, 2, 3 отлично)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboBox1.SelectedIndex = 0;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.Left))
{
DoUpdate();
}
return base.ProcessCmdKey(ref msg, keyData);
}
private void DoUpdate()
{
int index = Convert.ToInt32(comboBox1.SelectedItem);
index++;
if (comboBox1.Focused)
richTextBox1.Select();
comboBox1.SelectedItem = index.ToString();
}
private void SetComboValue(int value)
{
comboBox1.SelectedItem = value.ToString();
richTextBox1.AppendText(string.Format("Set value {0} \r\n", value.ToString()));
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
richTextBox1.AppendText(string.Format("Selected index changed before {0}\r\n", comboBox1.SelectedItem));
SetComboValue(Convert.ToInt32(comboBox1.SelectedItem));
richTextBox1.AppendText(string.Format("Selected index changed after {0}\r\n", comboBox1.SelectedItem));
}
}
Что об использовании метода, чтобы получить соответствующий ему уровень индекса COMBOBOX: SelectedIndex. Это исправить? – RvdK