2013-09-03 24 views
6

La finestra di dialogo del file deve aprire l'ultima posizione della directory che è stata utilizzata prima che venisse chiusa, ma non ho idea di come farlo. Il mio collega mi mostra solo l'esempio della parola, quando fai clic su "file" mostra gli ultimi file usati, mi ha detto di usare un registro o un file INI, che non ho mai usato prima.Directory iniziale per OpenFileDialog

Ecco il codice che sto usando:

string f_sOudeLocatie = @"D:\path\is\classified"; 

private void btBrowse_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog fdlg = new OpenFileDialog(); 
    fdlg.Title = "Zoek de CSV file"; 
    fdlg.InitialDirectory = f_sOudeLocatie; 
    fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"; 
    fdlg.FilterIndex = 1; 
    fdlg.RestoreDirectory = true; 
    if (fdlg.ShowDialog() == DialogResult.OK) 
    { 
     tbGekozenBestand.Text = fdlg.FileName; 
     tbVeranderNaamIn.Text = Path.GetDirectoryName(fdlg.FileName); 
     f_sOudeLocatie = Path.GetDirectoryName(fdlg.FileName); 
     f_sSourceFileName = fdlg.FileName; 
     f_sDestFileName = Path.GetFileName(Path.GetDirectoryName(fdlg.FileName)) + ".csv"; 
     btOpslaan.Enabled = true; 
     tbVeranderNaamIn.ReadOnly = false; 
    } 
} 
+1

Prova a eseguire l'applicazione un paio di volte. Dovrebbe essere il comportamento nativo che Windows Explorer apri windows sia l'ultima directory in cui è stato aperto qualche file. Io lavoro per me. –

+1

Penso che questo dovrebbe funzionare perché 'InitialDirectory' è impostato su' f_sOutdeLocatie' che viene salvato ogni volta che l'utente fa clic su 'OK'. –

+5

Che cosa non funziona? Hai chiesto al tuo collega? – Sayse

risposta

11

se si creerà l'OpenFileDialog al di fuori del evento click del pulsante si dovrebbe ricordare l'ultima cartella che sei stato

string f_sOudeLocatie = @"D:\path\is\classified"; 
OpenFileDialog fdlg = new OpenFileDialog(); 

public Form1() 
{ 
    InitializeComponent(); 
    fdlg.Title = "Zoek de CSV file"; 
    fdlg.InitialDirectory = f_sOudeLocatie; 
    fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"; 
    fdlg.FilterIndex = 1; 
    fdlg.RestoreDirectory = true; 
} 
private void btBrowse_Click(object sender, EventArgs e) 
{ 
    if (fdlg.ShowDialog() == DialogResult.OK) 
    { 
     fdlg.InitialDirectory = fdlg.FileName.Remove(fdlg.FileName.LastIndexOf("\\"));// THIS LINE IS IMPORTENT 

     tbGekozenBestand.Text = fdlg.FileName; 
     tbVeranderNaamIn.Text = Path.GetDirectoryName(fdlg.FileName); 
     f_sOudeLocatie = Path.GetDirectoryName(fdlg.FileName); 
     f_sSourceFileName = fdlg.FileName; 
     f_sDestFileName = Path.GetFileName(Path.GetDirectoryName(fdlg.FileName)) + ".csv"; 
     btOpslaan.Enabled = true; 
     tbVeranderNaamIn.ReadOnly = false; 
    } 
} 
1

Puoi utilizzare il registro per memorizzare l'ultima posizione della directory. E ogni volta che apri la finestra di dialogo del file, ottieni il valore dal registro e imposti come percorso predefinito. Quando è chiuso, riporta la posizione al registro.

Questo articolo del progetto di codice si spiega bene di lettura e scrittura al Registro ReadWriteDeleteFromRegistry

Se si sceglie di utilizzare il file INI, un po 'di ricerca vi darà esempi di come leggere e scrivere da file INI

4

È necessario impostare

fdlg.RestoreDirectory = false; 

Motivo:

La proprietà RestoreDirectory si assicura che il valore in Environment.CurrentDirectory venga ripristinato prima che OpenFileDialog si chiuda. Se RestoreDirectory è impostato su false, quindi Environment.CurrentDirectory verrà impostato su qualsiasi directory aperta a OpenFileDialog. Come spiegato here

+1

In realtà non è vero, Environment.CurrentDirectory non è stato modificato. – Pedro77

Problemi correlati