J'utilise ScintillaNet, un wrapper pour le contrôle Scintilla dans mon application C#. J'ajoute dynamiquement tous les mots qui se terminent par: (appelons ce mot-clé à partir de maintenant). Je l'ai fait en utilisant une regex la chaîne de mots-clés séparés par un espace chaque fois que l'utilisateur appuie sur la touche du côlon. Voici mon code (en cas CharAdded):C# Mettre en évidence les mots qui se terminent par deux-points
if (e.Ch == ':')
{
string wp = string.Empty;
Regex r = new Regex(@"\b\w+[:\b]");
MatchCollection m = r.Matches(Scintilla.Text);
for (int i = 0; i < m.Count; i++)
{
wp += " " + m[i].Value.Substring(0, m[i].Value.Length - 1); // Remove the colon
}
wp = wp.ToLower();
Scintilla.Lexing.Keywords[3] = wp;
}
Maintenant, le problème est, chaque fois qu'un nouveau mot-clé est tapé et l'utilisateur appuie sur le côlon, au lieu de simplement mettre en évidence le mot-clé, il inutilement mettre en évidence chaque mot-clé dans le document à nouveau. Donc, bien que mon codage fonctionne, c'est un mauvais codage, et je me demande comment je peux accélérer mon code en ne mettant en évidence que le dernier mot-clé saisi. Toute aide et/ou idées seraient appréciées.
Cela ne répond pas à la question, mais vous devez supprimer '\ b' de l'intérieur de la classe de caractères. Premièrement, cela ne signifie pas "limite de mot" dans ce contexte, deuxièmement, "\ b" ne correspondra pas après un deux-points, à moins que le caractère suivant ne soit alphanumérique. Utilisez juste '\ b \ w +:'. –