locked
positionner le curseur RRS feed

  • Question

  • Bonsoir, je dispose dans mon application de réaliser une combobox Multicolumn pour laquelle je suis entrain d'implémenter une aide à la saisie:

    Lorsque l'utilisateur frappe un caractère, c'est la chaîne qui contient la sous-chaîne déjà saisie qui est affichée dans la zone d'édition


    Le traitement se fait dans l'évènement KeyPress....


    Seulement lorsque la chaîne trouvée est affichée à l'aide un composant hérite "ToolStripDropDown".,
    le curseur se trouve dans la zone d'édition mais l'utilisateur ne vient pas de saisir un caractère , ce qui n'est pas esthétique.


    Comment faire pour positionner le curseur à sa guise, ou bien le faire avancer?

    Voila mon code

     
     
    private void BISMultiColumnComboBox_KeyPress(object sender, KeyPressEventArgs e)
            {
                ShowDropDown();
     
                string strFindStr = "";
     
                if (e.KeyChar == (char)8)
                {
                    if (this.SelectionStart <= 1)
                    {
                        this.Text = "";
                        return;
                    }
                    if (this.SelectionLength == 0)
                        strFindStr = this.Text.Substring(0, this.Text.Length - 1);
                    else
                        strFindStr = this.Text.Substring(0, this.SelectionStart - 1);
                }
                else
                {
                    if (this.SelectionLength == 0)
                        strFindStr = this.Text + e.KeyChar;
                    else
                        strFindStr = this.Text.Substring(0, this.SelectionStart) + e.KeyChar;
                }
     
                int intIdx = -1;
     
                // Search the string in the ComboBox list.
     
                if (this.MyDisplayMember != "" && this.MyValueMember != "" && this.MyDisplayMember != null && this.MyValueMember != null)
                    intIdx = FindIndex(this.userBisDataGridView1.MyBisDataGridView.Columns[this.MyDisplayMember].Index, strFindStr);
                else
                {
                    string Var = this.userBisDataGridView1.MyBisDataGridView.Columns[0].HeaderText;
                    intIdx = FindIndex(this.userBisDataGridView1.MyBisDataGridView.Columns[0].Index, strFindStr);
                }
     
                if (intIdx != -1)
                {
                    this.MySelectedIndex = intIdx;
                    e.Handled = true;
                    this.Focus();
                    this.SelectionStart = strFindStr.Length;
                    this.SelectionLength = this.Text.Length;
                    
                }
                else
                {
                    e.Handled = true;
                }
            }
     
     
    mardi 11 août 2009 10:56

Réponses

  • Bonjour,

    Pour changez la position du curseur utilisez la propriété SelectionStart et définissez SelectionLength à 0.

    Cordialement
    Gilles TOURREAU - MVP C#
    • Proposé comme réponse Dev-FX jeudi 20 août 2009 19:06
    • Marqué comme réponse Gilles TOURREAU jeudi 20 août 2009 19:48
    mercredi 19 août 2009 20:27