Switch case !

Résolu
milinakos Messages postés 20 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 5 juin 2011 - 1 juin 2011 à 10:23
milinakos Messages postés 20 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 5 juin 2011 - 1 juin 2011 à 17:00
Bonjour à tous je viens aujourd'hui poser ma troisième question sur ce forum
je suis sur un projet tout simple de débutant avec :
-fichier
-ouvrir
-enregistrer
-chemin d'accès (openfiledialog s'ouvre choix d'un fichier affichage du chemin d'accès a ce fichier dans un textbox)
-quitter



-options
-langages
-csharp
-VB
-PHP
-HTML
-SQL
ce que je voudrais, c'est qu'avec un switch/case la coloration syntaxique de ma textbox (fastcoloredtextbox qui fait de la coloration syntaxique) se fasse automatiquement par rapport a l'extension du fichier exemple : toto.cs aura la coloration syntaxique du csharp

je vais donc vous donner mon code source :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsApplication8
{
public partial class Form1 : Form
{
private string openFileName;

#region langage
private ToolStripMenuItem tsmiLangadeSelected;
public void initLanguageMnu()
{
tsmiLangadeSelected = null;
MnuLangSql.Checked = false;
MnuLangCsharp.Checked = false;
MnuLangVB.Checked = false;
MnuLangHTML.Checked = false;
MnuLangPHP.Checked = false;
}

public void LanguageOnChange(ToolStripMenuItem tsmi)
{
//recupere l'objet ToolStripMenuItem
tsmiLangadeSelected = tsmi;

//RaZ des langages menu
initLanguageMnu();

//inverse la valeur
tsmiLangadeSelected.Checked = !tsmiLangadeSelected.Checked; (deja ici il me dit que "La référence d'objet n'est pas définie à une instance d'un objet" donc si vous avez la solution...)

switch (tsmi.Text)
{
case "C#":
fctxt.Language = FastColoredTextBoxNS.Language.CSharp;
break;
case "VB":
fctxt.Language = FastColoredTextBoxNS.Language.VB;
break;
case "HTML":
fctxt.Language = FastColoredTextBoxNS.Language.HTML;
break;
case "PHP":
fctxt.Language = FastColoredTextBoxNS.Language.PHP;
break;
case "SQL":
fctxt.Language = FastColoredTextBoxNS.Language.SQL;
break;
default: MessageBox.Show("le langage " + tsmiLangadeSelected + " n'existe pas");
break;

}

}
/// <summary>
/// LanguageOnChange
/// </summary>
///


///


private void MnuLang_Click(object sender, EventArgs e)
{
LanguageOnChange((ToolStripMenuItem)sender);
}
#endregion

public Form1()
{

InitializeComponent();
fctxt.Text = string.Empty;
openFileName = string.Empty;


}

private void MnuFromFile()
{

}


//pour ouvrir l'openfiledialog et afficher le texte choisi dans un textbox.
private void buttonOuvrir_Click(object sender, System.EventArgs e)
{
// Titre
openFileDialog1.Title = "Chargement";
// Extension par défaut
openFileDialog1.DefaultExt = ".txt";
// Filtre sur les fichiers
openFileDialog1.Filter = "fichiers textes (*.txt)|*.txt|Tous les fichiers (*.*)|*.*";
openFileDialog1.FilterIndex = 1;
// Ouverture boite de dialogue OpenFile
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
{
//c'est ici que j'ai besoin d'aide parce que je ne sais pas quoi mettre HELP HELP
//si on .cs alors on appelle la function LanguageOnChange(MnuLangCsharp);
switch (openFileDialog1.FileName)
{
}

// On vide le TextBox
fctxt.Text = string.Empty;
// Ouverture du fichier sélectionné
// son nom est dans openFileDialog1.FileName
StreamReader sr = new StreamReader(openFileDialog1.OpenFile(), Encoding.Default);
try
{
string data = sr.ReadLine();
//boucle
while (data != null)
{
//text1.Text = text1.Text + data + "\r\n";
fctxt.Text += data + "\r\n";
data = sr.ReadLine();
}
}
finally
{
if (sr != null)
sr.Close();
}
}
}
}









// bouton Chemin d'accès ouvre un streamreader et affiche le chemin d'accès au dossier séléctionné
private void access_Click(object sender, EventArgs e)
{
//ouvre un openfiledialog
OpenFileDialog dlg = new OpenFileDialog();
dlg.CheckPathExists = true;
dlg.CheckFileExists = true;
if (dlg.ShowDialog() == DialogResult.OK)
fctxt.Text = dlg.FileName;
this.access.Click += new System.EventHandler(this.access_Click);
//affiche seulement le chemin d'accès dans le textbox
}
//bouton quitter pour fermer l'application
private void fermerToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{

}
//bouton enregistrer pour sauvegarder un fichier
private void button2_Click(object sender, EventArgs e)
{
//ouvre un savefiledialog
Stream myStream;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();

saveFileDialog1.Filter = "TXT files (*.txt)|*.txt";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.AddExtension = true;
saveFileDialog1.InitialDirectory = @"C:/";

if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(myStream);//saveFileDialog1.FileName);

sw.WriteLine(fctxt.Text);
sw.Flush();
sw.Close();


{

}
}
}
}


}
}



voila donc j'ai mit des points d'exclamation là ou j'ai des problèmes (histoire de vous faciliter la lecture merci d'avance de votre aide
cordialement
milinakos




lhortograf cey trai inportan surtou dent in faurum
A voir également:

8 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
1 juin 2011 à 10:47
Salut,

une coloration syntaxique et alors qu'ici tu'utilises même pas la balise code ? ><
Du coup on a un pavé de code imbitable, sans coloration, sans indentation.

Je me suis donc arrêté à la première erreur trouvée :
tsmiLangadeSelected.Checked =  !tsmiLangadeSelected.Checked

L'exception est, comme assez souvent, explicite et peut se résumer à "tsmiLangadeSelected est nul". Quand on regarde le code on voit d'ailleurs que juste avant cette ligne tu appelles ta fonction initLanguageMnu , qui a pour première ligne :
tsmiLangadeSelected  = null; 


Corrige déjà cette erreur et on voit pour la suite ;)
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 juin 2011 à 11:12
Voici ce que je te propose... (fait à l'arrache sans tester !)

public void LanguageOnChange(ToolStripMenuItem tsmi) 
{ 
//recupere l'objet ToolStripMenuItem 
tsmiLangadeSelected = tsmi; 

//RaZ des langages menu 
initLanguageMnu(); 

//inverse la valeur 
tsmiLangadeSelected.Checked = !tsmiLangadeSelected.Checked; 

ChangeLanguage(tsmiLangadeSelected.Text);

}

private void ChangeLanguage(string language) {
switch (language) 
{ 
case "C#": 
fctxt.Language = FastColoredTextBoxNS.Language.CSharp; 
break; 
case "VB": 
fctxt.Language = FastColoredTextBoxNS.Language.VB; 
break; 
case "HTML": 
fctxt.Language = FastColoredTextBoxNS.Language.HTML; 
break; 
case "PHP": 
fctxt.Language = FastColoredTextBoxNS.Language.PHP; 
break; 
case "SQL": 
fctxt.Language = FastColoredTextBoxNS.Language.SQL; 
break; 
default: MessageBox.Show("le langage " + tsmiLangadeSelected + " n'existe pas"); 
break; 
} 


et donc, il te suffit d'appeler la méthode comme ceci :
ChangeLanguage("C#");


Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 juin 2011 à 10:48
Bonjour,

Je pense que tu t'y prends mal...
il ne faut pas lié la sélection du langage en fonction du menu cliqué... tu te rends bien compte que ce n'est pas gérable.

il faut que la méthode gérant la colorisation prenne en paramètre le code du langage (C#, SQL, HTML, etc.). un point c'est tout.

ça va pas mal alléger ton code.

Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
0
milinakos Messages postés 20 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 5 juin 2011
1 juin 2011 à 11:01
merci beaucoup a vous deux pour ces réponses rapides !
@jopop : j'ai compris mon erreur et je l'ai rectifiée merci :)
@sebmafate : je t'avoue être un peu perdu et ne pas comprendre toute ta solution j'ai cru comprendre qu'il fallait changer de méthode et bien que ça ne me dérange pas personnellement ce n'est pas un projet que j'ai choisi de faire mais imposé par l'entreprise qui m’accueille en stage je doute donc qu'ils acceptent une autre méthode
merci encore pour vos réponses
et 1 problème de résolu 1
il ne m'en manque plus qu'un a résoudre et j'aurais fini (presque ? ) mon projet
cordialement
Milinakos


lhortograf cey trai inportan surtou dent in faurum
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
milinakos Messages postés 20 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 5 juin 2011
1 juin 2011 à 11:34
super code sebmafate merci beaucoup! juste une dernière question pour être sur de mon coup
quand tu dis :
et donc, il te suffit d'appeler la méthode comme ceci :
Code C# :

ChangeLanguage("C#");

cette méthode je dois l'appeller dans mon switch (celui qui est vide pour le moment) ou dans le switch ou il y'a déjà switch (language)
{
case "C#":
fctxt.Language = FastColoredTextBoxNS.Language.CSharp;
break;
case "VB":
fctxt.Language = FastColoredTextBoxNS.Language.VB;
break;
case "HTML":
fctxt.Language = FastColoredTextBoxNS.Language.HTML;
break;
case "PHP":
fctxt.Language = FastColoredTextBoxNS.Language.PHP;
break;
case "SQL":
fctxt.Language = FastColoredTextBoxNS.Language.SQL;
break;
default: MessageBox.Show("le langage " + tsmiLangadeSelected + " n'existe pas");
break;

(il va falloir que je revois les cours c# parce que là c'est vraiment frustrant de ne rien savoir comme ça)


lhortograf cey trai inportan surtou dent in faurum
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 juin 2011 à 11:56
tu dois l'appeler dans le switch que tu n'as pas encore écrit !


Sébastien FERRAND
Ingénieur Concepteur Senior
Microsoft Visual C# MVP 2004 - 2009
Blog Photo
0
milinakos Messages postés 20 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 5 juin 2011
1 juin 2011 à 12:31
bon après essai ça ne marche pas
il ne me colore pas mon texte selon l'extension
désormais deux choix s'offrent à moi soit :
-je persévère et peut-être que d'ici deux ans j'aurais un projet complet (ou pas)
-je passe ce de pc a la tronçonneuse (et moi avec car je sais très bien que les erreurs ne viennent pas de l'ordinateur mais de celui qui l'utilise)
merci quand même les gars avec toute votre bonne volonté le manchot que je suis n'arrivera pas a faire un projet correct


lhortograf cey trai inportan surtou dent in faurum
0
milinakos Messages postés 20 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 5 juin 2011
1 juin 2011 à 17:00
hello je suis de retour (mais pas pour vous jouer un mauvais tour)
j'ai enfin réussi a avoir ce que je voulais je vais donc mettre le code source de mon projet pour les personnes à qui, cela pourrait potentiellement servir!


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsApplication8
{
    public partial class Form1 : Form
    {
        private string openFileName;

        #region langage
        private ToolStripMenuItem tsmiLangadeSelected;
        public void initLanguageMnu()
        {
            MnuLangSql.Checked = false;
            MnuLangCsharp.Checked = false;
            MnuLangVB.Checked = false;
            MnuLangHTML.Checked = false;
            MnuLangPHP.Checked = false;
            //tsmiLangadeSelected = null;
        }

        public void LanguageOnChange(ToolStripMenuItem tsmi)
{
//recupere l'objet ToolStripMenuItem
tsmiLangadeSelected = tsmi;

//RaZ des langages menu
initLanguageMnu();

//inverse la valeur
tsmiLangadeSelected.Checked = !tsmiLangadeSelected.Checked; 
switch (tsmi.Text)
{
case "C#":
fctxt.Language = FastColoredTextBoxNS.Language.CSharp;
break;
case "VB":
fctxt.Language = FastColoredTextBoxNS.Language.VB;
break;
case "HTML":
fctxt.Language = FastColoredTextBoxNS.Language.HTML;
break;
case "PHP":
fctxt.Language = FastColoredTextBoxNS.Language.PHP;
break;
case "SQL":
fctxt.Language = FastColoredTextBoxNS.Language.SQL;
break;
default: MessageBox.Show("le langage " + tsmiLangadeSelected + " n'existe pas");
break;
        }

        }
        /// <summary>
        /// LanguageOnChange
        /// </summary>
        /// 


        /// 


        private void MnuLang_Click(object sender, EventArgs e)
        {
            LanguageOnChange((ToolStripMenuItem)sender);
            
        }
        #endregion

        public Form1()
        {

            InitializeComponent();
            fctxt.Text = string.Empty;
            openFileName = string.Empty;


        }

        private void MnuFromFile()
        {

        }


        //pour ouvrir l'openfiledialog et afficher le texte choisi dans un textbox.
        private void buttonOuvrir_Click(object sender, System.EventArgs e)
        {
            // Titre
            openFileDialog1.Title = "Chargement";
            // Extension par défaut
            openFileDialog1.DefaultExt = ".txt";
            // Filtre sur les fichiers
            openFileDialog1.Filter = "fichiers textes (*.txt)|*.txt|Tous les fichiers (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;
            // Ouverture boite de dialogue OpenFile
            if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                {
                    //si on .cs alors on appelle la function LanguageOnChange(MnuLangCsharp);
                    switch (Path.GetExtension( openFileDialog1.FileName).ToLower())
                    {
                        case ".cs":
                            LanguageOnChange(MnuLangCsharp);
                            break;
                        case ".vb":
                            LanguageOnChange(MnuLangVB);
                            break;
                        case ".sql":
                            LanguageOnChange(MnuLangSql);
                            break;
                        case ".php":
                            LanguageOnChange(MnuLangPHP);
                            break;
                        case ".html":
                            LanguageOnChange(MnuLangHTML);
                            break;
                        default:
                            MessageBox.Show("l'extension "+ Path.GetExtension( openFileDialog1.FileName)+" n'est pas pris en compte par l'application ");
                            break;

                        
                    }

                    // On vide le TextBox
                    fctxt.Text = string.Empty;
                    // Ouverture du fichier sélectionné
                    // son nom est dans openFileDialog1.FileName
                    StreamReader sr = new StreamReader(openFileDialog1.OpenFile(), Encoding.Default);
                    try
                    {
                        string data = sr.ReadLine();
                        //boucle
                        while (data != null)
                        {
                            //text1.Text = text1.Text + data + "\r\n";
                            fctxt.Text += data + "\r\n";
                            data = sr.ReadLine();
                        }
                    }
                    finally
                    {
                        if (sr != null)
                            sr.Close();
                    }
                }
            }
        }









        // bouton Chemin d'accès ouvre un streamreader et affiche le chemin d'accès au dossier séléctionné 
        private void access_Click(object sender, EventArgs e)
        {
            //ouvre un openfiledialog 
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.CheckPathExists = true;
            dlg.CheckFileExists = true;
            if (dlg.ShowDialog() == DialogResult.OK)
                fctxt.Text = dlg.FileName;
            this.access.Click += new System.EventHandler(this.access_Click);
            //affiche seulement le chemin d'accès dans le textbox
        }
        //bouton quitter pour fermer l'application 
        private void fermerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
        {

        }
        //bouton enregistrer pour sauvegarder un fichier 
        private void button2_Click(object sender, EventArgs e)
        {
            //ouvre un savefiledialog
            Stream myStream;
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();

            saveFileDialog1.Filter = "TXT files (*.txt)|*.txt";
            saveFileDialog1.FilterIndex = 2;
            saveFileDialog1.RestoreDirectory = true;
            saveFileDialog1.AddExtension = true;
            saveFileDialog1.InitialDirectory = @"C:/";

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if ((myStream = saveFileDialog1.OpenFile()) != null)
                {
                    System.IO.StreamWriter sw = new System.IO.StreamWriter(myStream);//saveFileDialog1.FileName);

                    sw.WriteLine(fctxt.Text);
                    sw.Flush();
                    sw.Close();


                    {

                    }
                }
            }
        }


    }
}


avec les balises de code cette fois
merci à ceux qui m'ont aidé (et bien en plus)
cordialement milinakos



lhortograf cey trai inportan surtou dent in faurum
0
Rejoignez-nous