C# combobox index sélectionné changé les feux de l'ancienne valeur

J'ai une situation, quand je veux modifier la valeur sélectionnée d'une liste déroulante dans une application windows forms à l'aide de Ctrl-Gauche ori Ctrl-Droite. Toutefois, si la zone de liste déroulante est le contrôle sélectionné sur la forme que cela ne fonctionne pas. La valeur sélectionnée est définie à l'ancienne valeur après qu'il est défini à la valeur à neuf. Si la zone de liste déroulante n'est pas le contrôle sélectionné puis tout fonctionne bien. Dans mon application, le combo peut recevoir le focus, car les valeurs peuvent également être modifié avec la souris. Tout ce que je veux peut être fait en sélectionnant un autre contrôle sur la forme avant de la modification de la valeur que je n'aime pas cette solution pour beaucoup.

Donc, il y a deux questions: Pourquoi l'événement selectedIndexChanged tiré avec l'ancienne valeur si la combo est le contrôle sélectionné sur la forme et le
Comment pouvez éviter cela ou si je ne peux pas ce qu'est une bonne solution de contournement ? Plus loin est un peu de code pour illustrer mon problème. Si vous supprimez une boîte combo et un richtext case sur un formulaire et de copier le code ci-dessous dans Form1.cs vous pouvez voir mon problème. Vous avez besoin de faire le combo DropDownList Style et ajouter quelques chiffres comme des éléments (1, 2, 3 est très bien)

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));
    }
}
  • Que penser de l'utilisation de la méthode appropriée pour obtenir combobox index: SelectedIndex. Le fait de résoudre ce problème?
InformationsquelleAutor mosu | 2009-12-18