[C#] Autocomplétion, problème r/w memory

Fermé
pti_jul Messages postés 93 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 16 novembre 2007 - 25 sept. 2007 à 17:31
 Ping - 14 déc. 2010 à 12:39
Bonjour à vous tous

Après avoir répondu pendant quelques semaines aux internautes dans différents forums de CCM, c'est à mon tour d'avoir besoin de votre aide.

En effet, je programme en C# une petite application qui fait des requêtes sur une base de données.
J'ai une fenêtre avec deux TextBox. Le premier a l'autocomplétion (suggestion lors de la frappe) d'activé, le second nom.
Or le second fait planté de temps en temps le programme avec l'exception suivante :
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
La localisation de l'exception (en gras):
static void Main()
{
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new Form1());       
}


Voici l'activation de l'autocomplétion auprès de mon TextBox :

this.textBox2.AutoCompleteSource = AutoCompleteSource.CustomSource;
this.textBox2.AutoCompleteMode = AutoCompleteMode.Suggest;
this.textBox2.AutoCompleteCustomSource.Clear();
this.textBox2.AutoCompleteCustomSource.AddRange(Remplir_Noms_Proposes());



Je suppose que comme l'autocomplétion modifie l'affichage du TextBox, la fenêtre également, il y a conflit par moment. L'exception est d'autant plus levée si je met Append à la place de Suggest dans le mode d'autocomplétion.

De plus, impossible de récupérer la touche ENTER frappé dans le 2ème textbox (avec l'autocomplétion) alors qu'avec EXACTEMENT le même code elle est récupérée dans le premier textbox.
Voici mon code de détection de la touche ENTER :

if (e.KeyChar == (char)Keys.Enter)
      Console.WriteLine("Touche ENTER pressée");
else
      Console.WriteLine("autre caractère pressé");


D'avance merci pour vos conseils ou solutions.

Bonne soirée à vous

pti_jul
A voir également:

3 réponses

pti_jul Messages postés 93 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 16 novembre 2007 4
26 sept. 2007 à 11:41
Rebonjour

Bon, finalement l'exception ne se lève plus. Il y avait visiblement doublon (j'avais mal interprété la configuration d'activation de l'autocomplétion, je l'activais à chaque fois dans le TextChanged pensant qu'il fallait mettre à jour à l'aide de AddRange (jvous l'ai dit, problème d'interprétation, c'est génial en fait autrement)).

J'ai cependant toujours un problème, il ne me prend pas en compte le caractère ENTER dans le textBox qui a l'autocomplétion d'activée (alors que l'espace est détecté).

Mon code est le suivant :
// 
// textBox2
// 
this.textBox2.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.textBox2.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
this.textBox2.AutoCompleteCustomSource.AddRange(Remplir_Noms_Proposes());
this.textBox2.Location = new System.Drawing.Point(15, 74);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(100, 20);
this.textBox2.TabIndex = 3;
this.textBox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox2_KeyPress);


private void textBox2_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
      Console.WriteLine("***APPEL textboxkeypress***");
       if (e.KeyChar == (char)Keys.Enter)
               Console.WriteLine("Touche ENTER pressée");
       else if (e.KeyChar == (char)Keys.Space)
               Console.WriteLine("Barre d'espace pressée");
       else
               Console.WriteLine("autre caractère pressé");
}

Si j'appuie sur Espace : ca affiche bien Barre d'espace pressée
Si j'appuie sur Enter, cela n'appelle même pas KeyPress (pas d'affichage de ***APPEL textboxkeypress***)
Si j'appuie sur Backspace il affiche bien autre caractère pressé
De plus, en tappant une lettre dans mon textBox, il affiche bien autre caractère pressé dans la console.

Quelqu'un aurait une idée de comment pouvior gérer le Enter. En effet, j'aimerai qu'il me propose un nom de client et j'appuie sur Enter et cela m'ouvre une fenêtre avec les infos détaillés du client (adresses, ...)

Merci beaucoup de votre aide.

Bonne journée

pti_jul
0
Même probleme t'as trouvé une soluce ?
0
same for me
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
8 juin 2010 à 22:40
Utilises-tu du code unsafe?

Pourrais-tu mettre un zip avec toute ta solution pour que nous puissions y jeter un coup d'oeil?
0
Peut etre le AcceptButton de la form est-il renseigné ? dans ce cas, le controle ne recoit meme pas le enter, c'est intercepté par la form...
0

Discussions similaires