2010-05-03 4 views
0

J'ai un OpenFileDialog personnalisé (VS2008, C#, Windows Forms) avec un ComboBox. Le ComboBox aura une liste de chemins que l'utilisateur peut sélectionner.Changement de répertoire dans la boîte de dialogue Ouvrir le fichier par programme

Ma question, est-il un moyen que je peux changer le répertoire dans la boîte de dialogue Ouvrir un fichier pour pointer vers le chemin dans l'élément sélectionné de liste déroulante.

InitialDirectory ne fonctionne que lorsque j'ouvre la boîte de dialogue, je voulais un moyen de changer le répertoire par programme après l'ouverture de la boîte de dialogue.

Merci

+0

Comment cela fonctionnerait-il? S'il vous plaît expliquer plus. – leppie

Répondre

1

Si vous utilisez Vista ou Windows 7 avec .NET 3.5 SP1, je vous recommande d'utiliser la propriété CustomPlaces sur OpenFileDialog plutôt qu'une liste déroulante personnalisée.

Voir cet article MSDN (pour WPF): http://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.customplaces(v=VS.100).aspx

Ou cet article MSDN (pour Windows Forms): http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.customplaces(v=VS.100).aspx

Sur Windows 2000 et XP, il est également possible de personnaliser la barre latérale places. Mais c'est plus difficile et vous oblige à utiliser du code C++ (via CLI/C++ est probablement le meilleur). La technique est décrite en détail dans cet article MSDN: http://msdn.microsoft.com/en-us/magazine/cc300434.aspx

Si vous êtes décidé à utiliser une liste déroulante que vous avez ajoutée à OpenFileDialog, vous aurez probablement besoin de savoir quel message Windows envoyer à la boîte de dialogue . J'ai peur de ne pas savoir quel message vous devez envoyer. Les informations méchantes de l'API Win32 interne de la boîte de dialogue Ouvrir/Enregistrer commun sont détaillées ici:

Si vous pouvez déterminer quels messages envoyer à la fenêtre, la façon de procéder consiste probablement à remplir le champ de texte du nom de fichier avec le répertoire vous voulez basculer pour simuler un clic sur un bouton OK. La boîte de dialogue va basculer vers ce répertoire si vous faites cela. Envoyer des messages à cette fenêtre vous demandera probablement de ne pas utiliser directement OpenFileDialog mais plutôt de sous-classer la classe abstraite FileDialog sur laquelle elle est basée.

-1

Il suffit de régler la propriété InitialDirectory de openFileDialog1

private void button1_Click(object sender, System.EventArgs e) 
{ 
    Stream myStream = null; 
    OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

    openFileDialog1.InitialDirectory = cmbPath.SelectedValue.ToString(); 
    openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ; 
    openFileDialog1.FilterIndex = 2 ; 
    openFileDialog1.RestoreDirectory = true ; 

    if(openFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
     try 
     { 
      if ((myStream = openFileDialog1.OpenFile()) != null) 
      { 
       using (myStream) 
       { 
        // Insert code to read the stream here. 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
     } 
    } 
} 
+0

la zone de liste déroulante est intégrée dans la même forme personnalisée que la boîte de dialogue ouverte. Par conséquent, la définition du répertoire initial ne fonctionnera pas car la boîte de dialogue est déjà ouverte. – ababeel

-1

Comme nous l'avons dit InitialDirectory fonctionne avant la main, mais pourquoi vous changer le dossier postfaces? FileOpenDialog est une boîte de dialogue modale, par conséquent l'utilisateur ne peut pas utiliser autre chose de votre application que la boîte de dialogue. Quel est le bénéfice et la raison pour laquelle vous ne voulez pas configurer le dossier? Il semble que vous utilisez les mauvais outils pour faire le travail.

+0

La zone de liste déroulante contiendra les chemins les plus récents que l'utilisateur peut utiliser. Il émule en fait le FileOpen dans 3Ds Max. – ababeel

+0

pouvez-vous poster une vidéo? Vous voulez une sorte de liste d'historique des fichiers utilisés récemment? Créez votre propre formulaire qui combine l'utilisation de FileOpenDialog et vos propres besoins? – RvdK