2017-08-14 6 views
-1

J'essaie de trouver un moyen de réinitialiser le répertoire initial/par défaut après la fermeture d'un OpenFileDialog. Prenons l'exemple suivant:OpenFileDialog - Comment empêcher l'écrasement du répertoire par défaut?

using (OpenFileDialog openFile = new OpenFileDialog()) 
{ 
    // Example: This opens in the 'Desktop' directory 
    // User navigates to 'Documents' directory in the Form before selecting a file 
    DialogResult result = openFile.ShowDialog(); 
    if (result == DialogResult.OK) MessageBox.Show(openFile.FileName); 
} 

// Somewhere else, this code then runs 
using (OpenFileDialog openFile = new OpenFileDialog()) 
{ 
    // Problem: This now opens in 'Documents' directory. Not good! 
    // How to open using the same default directory (ie: Desktop)? 
    DialogResult result = openFile.ShowDialog(); 
    if (result == DialogResult.OK) MessageBox.Show(openFile.FileName); 
} 

Pour être clair, le « Bureau » est juste un exemple, je sais pas en fait le répertoire initial comme il est stocké dans le registre (si je comprends bien).

J'ai essayé d'utiliser l'option RestoreDirectory. Cela ne semblait pas avoir d'effet. D'après ce que j'ai lu ailleurs, il est supposé réinitialiser le répertoire Environment.CurrentDirectory à sa valeur d'origine, ce qui semble raisonnable. Cependant, je ne pense pas qu'OpenFileDialog utilise même Environment.CurrentDirectory puisque la valeur n'est jamais changée, et ne correspond jamais à ce qu'ouvre OpenFileDialog (sauf si je navigue manuellement dessus).

Y at-il quelque chose que je pourrais manquer ici? Est-ce que quelqu'un sait comment arrêter d'écraser selon la variable de répertoire utilisée par défaut par OpenFileDialog?

+2

'openFile.InitialDirectory = yourPath;' – LarsTech

+0

@LarsTech J'ai spécifiquement mentionné dans mon article que je n'ai pas de répertoire initial. – AnotherProgrammer

+0

Ce n'est pas clair pour moi quel répertoire vous voulez ouvrir. Si la première fois que vous utilisez la boîte de dialogue contient le répertoire que vous souhaitez ouvrir, stockez-le dans une variable pour la prochaine fois. – LarsTech

Répondre

0

Le répertoire par défaut est stocké dans la clé de Registre suivante sur Windows 7.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32 

IIRC, cela pourrait être différent sur d'autres systèmes d'exploitation, de sorte que vous pouvez trouver le répertoire exact en fonction de votre version du système d'exploitation . Par conséquent, vous pouvez saisir cette valeur lors du lancement de votre application et l'enregistrer dans la mémoire, puis la définir sur OpenFileDialog.InitialDirectory à chaque fois avant d'ouvrir la boîte de dialogue.

+0

Gardez à l'esprit que la récupération d'une telle valeur du registre nécessite que votre application dispose des autorisations nécessaires pour lire le registre. Dans les environnements à faible fiabilité ou pour les applications d'entreprise, cela peut poser problème. – Gigabyte

+0

Existe-t-il un moyen de définir cette valeur? Je préfère de loin réinitialiser la valeur après le premier OpenFileDialog (puisque ce morceau de code particulier est isolé du reste de l'application) que d'avoir à s'assurer que chaque OpenFileDialog unique dans l'ensemble de l'application le définit. Et je suis d'accord si d'autres OpenFileDialog utilisent l'implémentation par défaut, je ne veux pas empêcher cela. – AnotherProgrammer

+0

@Gigabyte vous avez tout à fait raison. OP ne doit utiliser cette méthode que s'il sait que cela ne va pas poser problème. – Sach