1

Je crée un éditeur de texte et je voudrais afficher le nom du fichier ouvert en cours dans le titre du formulaire (comme le Bloc-notes fait "Untitled - Notepad" ou "" Fichier - Bloc-notes ")Comment afficher le nom du fichier ouvert en cours dans le titre du formulaire?

Je suppose que cela se fait en collaboration avec le SaveFileDialog et OpenFileDialog, donc je vais poster mon code actuel

OpenFile.

private void OpenFile() 
     { 
      NewFile(); 
      OpenFileDialog ofd = new OpenFileDialog(); 
      ofd.Title = "Open File"; 
      ofd.FileName = ""; 
      ofd.Filter = "Rich Text Files (*.rtf)|*.rtf|Text Document (*.txt)|*.txt|Microsoft Word Document (*.doc)|*.doc|Hypertext Markup Language Document (*.html)|*.html"; 
      if (ofd.ShowDialog() != DialogResult.OK) return; 
      StreamReader sr = null; 
      try 
      { 
       sr = new StreamReader(ofd.FileName); 
       this.Text = string.Format("{0} - Basic Word Processor", ofd.FileName); 
       richTextBoxPrintCtrl1.Text = ofd.FileName; 
       richTextBoxPrintCtrl1.Text = sr.ReadToEnd(); 
       filepath = ofd.FileName; 
       richTextBoxPrintCtrl1.LoadFile(fileName, RichTextBoxStreamType.RichText); 

      } 
      catch 
      { 
      } 
      finally 
      { 
       if (sr != null) sr.Close(); 
      } 

SaveFile

private void SaveFileAs() 
     { 
      SaveFileDialog sfdSaveFile = new SaveFileDialog(); 
      sfdSaveFile.Title = "Save File"; 
      sfdSaveFile.FileName = "Untitled"; 
      sfdSaveFile.Filter = "Rich Text Files (*.rtf)|*.rtf|Text Document (*.txt)|*.txt|Microsoft Word Document (*.doc)|*.doc|Hypertext Markup Language Document (*.html)|*.html"; 
      if (sfdSaveFile.ShowDialog() == DialogResult.OK) 
       try 
       { 
        filepath = sfdSaveFile.FileName; 
        SaveFile(); 
        this.Text = string.Format("{0} - Basic Word Processor", sfdSaveFile.FileName); 
       } 
       catch (Exception exc) 
       { 

       } 


void SetWindowTitle(string fileName) { 
    this.Text = string.Format("{0} - Basic Text Editor", System.IO.Path.GetFileNameWithoutExtension(OpenFileDialog.Filename)); 

Comment puis-je obtenir le nom du fichier et le mettre dans le titre du formulaire (comme le fait Notepad où il a le nom du fichier suivi du nom de l'éditeur de texte).

+0

Qu'avez-vous essayé? .. étant donné ce que vous avez, mettre le titre du formulaire est en fait un pas en arrière en difficulté .. –

+0

La seule chose que j'ai essayée est d'afficher le nom du fichier dans une étiquette, mais cela ne marchait pas très bien (il affichait seulement titres de fichiers .rtf) ... –

+0

comme un côté des blocs de capture vides sont une mauvaise idée - http://stackoverflow.com/questions/1234343/why-are-empty-catch-blocks-a-bad-idea – Jason

Répondre

0

Vous pouvez envelopper dans une fonction comme celle-ci:

void SetWindowTitle(string fileName) { 
    this.Text = string.Format("{0} - MyEditor", System.IO.Path.GetFileName(fileName)); 
} 

..et passe dans la boîte de dialogue FileName ..

EDIT:

Votre problème est que vous n'êtes pas appeler la fonction que je t'ai donnée. Vous avez la fonction que je vous ai donnée ci-dessus .. mais vous ne l'appelez pas.

Remplacer ceci:

this.Text = string.Format("{0} - Basic Word Processor", sfdSaveFile.FileName); 

Avec ceci:

SetWindowTitle(sfdSaveFile.FileName); 

Et remplacer:

this.Text = string.Format("{0} - Basic Word Processor", ofd.FileName); 

Avec ceci:

SetWindowTitle(ofd.FileName); 
+0

Comment est cela fait? –

+0

Compris. Question: Il affiche le chemin complet du fichier. Comment pourrais-je faire seulement afficher le nom de fichier et l'extension de fichier? –

+0

@Toby Voir ma modification. –

1

Lors de l'ouverture. . .

private void OpenFile() 
{ 
     OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Title = "Open File"; 
     ofd.FileName = ""; 
     ofd.Filter = "Rich Text Files (*.rtf)|*.rtf|Text Document (*.txt)|*.txt|Microsoft Word Document (*.doc)|*.doc|Hypertext Markup Language Document (*.html)|*.html"; 
     ofd.ShowDialog(); 
     try 
     { 
      // just one line is added 
      this.Text = string.Format("{0} - MyNotepad", Path.GetFileName(ofd.Filename)); 
      richTextBoxPrintCtrl1.Text = ofd.FileName; 
      StreamReader stread = new StreamReader(richTextBoxPrintCtrl1.Text); 
      richTextBoxPrintCtrl1.Text = stread.ReadToEnd(); 
      stread.Close(); 
      richTextBoxPrintCtrl1.LoadFile(fileName, RichTextBoxStreamType.RichText); 
     } 
     catch { } 
    } 

Lors de l'enregistrement. . .

private void SaveFileAs() 
{ 
    SaveFileDialog sfdSaveFile = new SaveFileDialog(); 
    sfdSaveFile.Title = "Save File"; 
    sfdSaveFile.FileName = "Untitled"; 
    sfdSaveFile.Filter = "Rich Text Files (*.rtf)|*.rtf|Text Document (*.txt)|*.txt|Microsoft Word Document (*.doc)|*.doc|Hypertext Markup Language Document (*.html)|*.html"; 
    if (sfdSaveFile.ShowDialog() == DialogResult.OK) 
     try 
     { 
      richTextBoxPrintCtrl1.SaveFile(sfdSaveFile.FileName, RichTextBoxStreamType.RichText); 
      filepath = sfdSaveFile.FileName; 
      // just one line is added 
      this.Text = string.Format("{0} - MyNotepad", Path.GetFileName(sfd.Filename)); 
     } 
     catch (Exception exc) 
     { 

     } 
} 

Juste une mise à jour

Toby- The empty catch blocks are needed. If the user cancels the ofd or sfd without the catch block, the program crashes. It keeps the program from crashing

Vous n'avez pas besoin du bloc catch pour vérifier si l'utilisateur sélectionné OK/Annuler.

OpenFileDialog & SaveFileDialog a méthode ShowDialog qui retourne DialogResult

et la valeur de DialogResult.OK indique que l'utilisateur a le fichier sélectionné pour ouvrir/enregistrer et n'a pas annulé l'opération.

Et par exemple avec OpenFile

OpenFile private void() { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "Ouvrir le fichier"; ofd.FileName = ""; ofd.Filter = « Rich Text Files (.rtf) | .rtf | Document texte (txt) | txt | Document Microsoft Word (.doc ) | .doc | Hypertext Markup Language document (.html) | .html ";

if (ofd.ShowDialog() == DialogResult.OK) 
    {  
     // just one line is added 
     this.Text = string.Format("{0} - MyNotepad", Path.GetFileName(ofd.Filename)); 
     richTextBoxPrintCtrl1.Text = ofd.FileName; 
     StreamReader stread = new StreamReader(richTextBoxPrintCtrl1.Text); 
     richTextBoxPrintCtrl1.Text = stread.ReadToEnd(); 
     stread.Close(); 
     richTextBoxPrintCtrl1.LoadFile(fileName, RichTextBoxStreamType.RichText); 
    } 
} 
+0

Cheers mate. Cela fonctionne bien avec la contribution de Simon. J'ai juste besoin d'afficher le nom du fichier seulement maintenant et ce sera fait. –

+2

@Toby - fixe monsieur, ne sais pas comment dans le monde j'ai raté Path.GetFileName! Je suppose que la rupture avec GF affecte vraiment l'esprit! –

+0

J'ai eu la même chose il y a quelques mois, mec. Je sais exactement ce que ça fait. J'espère que les choses s'amélioreront bientôt pour vous. :-) –

Questions connexes