J'ai une situation où je veux changer la valeur sélectionnée d'une zone de liste déroulante dans une application Windows Forms en utilisant Ctrl-Left ou Ctrl-Right. Toutefois, si la zone de liste déroulante est le contrôle sélectionné sur le formulaire, cela ne fonctionne pas. La valeur sélectionnée est définie sur l'ancienne valeur après qu'elle a été définie sur la nouvelle valeur. Si la zone de liste déroulante n'est pas le contrôle sélectionné, tout fonctionne correctement. Dans mon application, le combo peut recevoir le focus car les valeurs peuvent également être modifiées avec la souris. Alors que ce que je veux peut être accompli en sélectionnant un autre contrôle sur le formulaire avant de changer la valeur, je n'aime pas beaucoup cette solution. Donc, il y a deux questions: Pourquoi l'événement selectedIndexChanged est-il déclenché avec l'ancienne valeur si la zone de liste déroulante est le contrôle sélectionné sur le formulaire et Comment peut-on éviter cela ou si je ne peux pas savoir quelle est une bonne solution de contournement? De plus, il y a du code pour illustrer mon problème. Si vous déposez une zone de liste modifiable et une zone richtext sur un formulaire et copiez le code ci-dessous dans Form1.cs, vous pouvez voir mon problème. Vous devez faire le combo DropDownList style et ajouter quelques chiffres que les éléments (1, 2, 3 est très bien)C# combobox l'index sélectionné a changé d'ancienne valeur
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));
}
}
Qu'en est-il en utilisant la méthode pour obtenir l'index correspond le combobox: SelectedIndex. Est-ce que ça arrange ça? – RvdK