Vous essayez d'écrire du code pour récupérer le chemin du fichier afin qu'il puisse être utilisé plus tard dans une fonction ReadFile(), mais rencontre quelques problèmes.Implémentation de la fonctionnalité du bouton Réessayer sur les problèmes MessageBox (C#)
Mon but est d'implémenter un MessageBox qui génère un message d'erreur avec un bouton de réessai et de fermeture fonctionnant tous les deux fonctionnellement. Lorsque le code suivant est exécuté, il boucle simplement le bloc try et n'entre jamais dans le bloc catch, ce que je veux faire quand je ne sélectionne pas un fichier ou que je clique sur cancel sur OpenFileDialog.
est Ci-dessous le code que je suis actuellement en utilisant ..
public static string GetFile() {
MyLog.Write(@"Begin OpenFileDialog Process", LogFormat.Evaluate);
var path = _lastFilePath != string.Empty ? _lastFilePath : GetBaseDirectory();
if (path == null || !Directory.Exists(path))
path = Assembly.GetExecutingAssembly().CodeBase;
var dialog = new OpenFileDialog {
InitialDirectory = path,
Filter = @"Text|*.txt|All|*.*",
RestoreDirectory = true
};
var result = DialogResult.Retry;
while (result == DialogResult.Retry) {
try {
if (dialog.ShowDialog() != DialogResult.OK) {
MyLog.Write(@"File Retrieval was Unsuccessful", LogFormat.Result);
} else {
MyLog.Write($"FilePath: {dialog.FileName}", LogFormat.Process);
MyLog.Write(@"File Retrieval was Successful", LogFormat.Result);
_lastFilePath = Path.GetDirectoryName(dialog.FileName);
return dialog.FileName;
}
} catch when (result == DialogResult.Retry) {
MyLog.Write("No File Selected", LogFormat.Error);
result = MessageBox.Show(@"Please select a file..", @"No File Selected!", MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation);
if (result == DialogResult.Abort) throw;
return null;
}
}
return null;
}
J'ai essayé d'adapter le code à un similar question, mais je suis mal à comprendre pourquoi la logique ne fonctionne pas dans mon contexte.
Ce que je fais incorrectement?
EDIT: à l'aide de la réponse d'Ephraïm, j'ai pu trouver ce qui suit qui semble fonctionner ..
// USED TO RETRIEVE THE FILENAME IN A OPENFILEDIALOG
public static string GetFile() {
MyLog.Write(@"Begin OpenFileDialog Process", LogFormat.Evaluate);
var path = _lastFilePath != string.Empty ? _lastFilePath : GetBaseDirectory();
if (path == null || !Directory.Exists(path))
path = Assembly.GetExecutingAssembly().CodeBase;
var dialog = new OpenFileDialog {
InitialDirectory = path,
Filter = @"Text|*.txt|All|*.*",
RestoreDirectory = true
};
var result = DialogResult.Retry;
while (result == DialogResult.Retry) {
if (dialog.ShowDialog() != DialogResult.OK) {
MyLog.Write(@"File Retrieval was Unsuccessful", LogFormat.Result);
MyLog.Write("No File Selected", LogFormat.Error);
result = MessageBox.Show(@"Please select a file..", @"No File Selected!", MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation);
if (result == DialogResult.Abort || result == DialogResult.Cancel) { break; }
if (result == DialogResult.Retry) { return GetFile(); }
}
MyLog.Write($"FilePath: {dialog.FileName}", LogFormat.Process);
MyLog.Write(@"File Retrieval was Successful", LogFormat.Result);
_lastFilePath = Path.GetDirectoryName(dialog.FileName);
return dialog.FileName;
}
return null;
}
Avez-vous le mettre dans un débogueur? – DWright
L'instruction 'catch' ne se déclenche jamais car aucune exception n'est levée dans la section' try'. – Aaron