IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Coloration syntaxique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut [C#] Coloration syntaxique
    Bonjour,

    J'écris une petite application qui permet de se connecter à une base de donnée pour y exécuter des requêtes.
    J'aimerais que les requête que l'utilisateurs ouvrent (elle se trouve déjà dans le PC) subissent une coloration syntaxique des mots clés (SELECT, FROM, WHERE, ...). Pour ce faire j'utilise la boucle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    string[] motcle = {"SELECT", "FROM", "WHERE", ...};
    int start = 0;  //A partir de l'index ou l'on commence la recherche
    foreach(string cle in motcle)
    {
       while(marichtextbox.Text.IndexOf(cle, start) != -1)  //Tant que l'on trouve le mot clé
       {
          marichtextbox.Select(marichtextbox.Text.IndexOf(cle, start), mot.lenght);  //Sélectionne le mot
          marichtextbox.SelectionColor = Color.Blue;  //Change sa couleur
          start = marichtextbox.Text.IndexOf(cle, start) + mot.lenght;  //Index de départ de recherche reçoit l'index du caractére après le mot coloré
       }
       start = 0;
    }
    Cela fonctionne partiellement car si, j'invente, je veut colorer le mot FROM et qu'une de mes tables s'appelle FROMAGE j'aurais ceci FROMAGE.
    Si quelqu'un avait une solution ou connaitrait une autre méthode ?

    Merci
    Bonne journée

  2. #2
    Membre chevronné
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Par défaut
    Tu devrais vérifier que ton mot est un mot entier et pas une partie de mot. Il doit être précédé par un espace (sauf s'il est en début de ligne) et suivi par un espace (sauf s'il est en fin de ligne).

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Dans ce cas là utilise plutot une expression rationnelle, ça permet de gérer facilement ce genre de problèmes.

    EDIT : cette expression sélectionne les keywords : (?<Keywords>\b(WHERE|SELECT|FROM|AND|OR|ORDER|BY|GROUP)\b)
    En utilisant Regex.Matches(), tu peux récupérer une liste de Match. Chaque Match contient l'index de départ dans la chaine et la taille, ça te permettra de sélectionner dans le richtextbox et d'appliquer la couleur.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Bonjour,

    Merci pour l' expression rationnelle, encore un truc que je ne connaissais pas mais qui sert bien.
    Par contre j'ai un autre petit problème mais je ne sais pas si ca viens de l'expression. Lorsque j'ouvre une premiére requête, la coloration se passe très bien mais si j'en ouvre une seconde alors là tout le texte est coloré et plus seulement les mots clés.

    Merci

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Peux tu poster le code que tu utilises ?
    Merci.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Voici le code qui ouvre et colore la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    private void TVExplorateur_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
    {
    	if(filefilter.Accept(e.Node.Tag.ToString()))  //Vérifie que le noeud est bien un fichier .sql
    	{
    		StreamReader FichierSQL = File.OpenText(e.Node.Tag.ToString()); // Ouverture du fichier en lecture
     
    		tbRequete.Text = FichierSQL.ReadToEnd().Trim();  //Place le texte dans la richtextbox
     
    		FichierSQL.Close();
     
    		Match m = Regex.Match(tbRequete.Text, "(?<Keywords>\\b(SELECT|FROM|WHERE|OR|AND|ORDER BY)\\b)", RegexOptions.IgnoreCase);  //Expression rationnelle
    		while (m.Success)  //Tant que l'on trouve un mot cle
    		{
    			tbRequete.Select(m.Index, m.Length);  //On sélectionne le mot
    			tbRequete.SelectionColor = Color.Blue;  //On le colore en bleu
    			tbRequete.SelectionFont = new Font(tbRequete.SelectionFont, FontStyle.Bold);  //On le met en gras
    			m = m.NextMatch();  //Retourne le prochain index
    		}
    	}
    }

Discussions similaires

  1. [C#] Coloration syntaxique !
    Par UNi[FR] dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/04/2009, 09h37
  2. Coloration syntaxique
    Par iubito dans le forum Evolutions du club
    Réponses: 73
    Dernier message: 02/11/2005, 10h01
  3. [debutant] coloration syntaxique
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 30/06/2004, 15h16
  4. Coloration syntaxique
    Par _-Sky-_ dans le forum Composants
    Réponses: 4
    Dernier message: 03/01/2004, 21h58
  5. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2002, 01h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo