2012-08-27 2 views
2

나는 이것을 가지고 있으며 사용자가 응용 프로그램을 닫고 다시 열 때 마지막으로 사용 된 폴더 만 저장합니다.사용자가 선택한 마지막 폴더를 어떻게 저장합니까?

private void btnBrowse_Click(object sender, EventArgs e) 
{ 
    Properties.Settings.Default.Reload(); 

    fbFolderBrowser.SelectedPath = AppVars.LastSelectedFolder; 

    if (fbFolderBrowser.ShowDialog() == DialogResult.OK) 
    { 
      Properties.Settings.Default.LastSelectedFolder = fbFolderBrowser.SelectedPath.ToString(); 
      Properties.Settings.Default.Save(); 
    } 
} 

사용자가 폴더를 선택할 때마다 해당 경로를 저장하려고합니다. 그런 다음 찾아보기 단추를 다시 클릭하면 기본 경로가 마지막으로 선택됩니다.

위의 코드는 작동하지 않습니다. 선택한 경로를 저장하고 앱을 다시 시작해야만 되돌아갑니다. 같은 앱 세션에서 마지막 경로를 저장하는 방법은 무엇입니까?

+0

저장 한 후에 설정을 다시로드해야합니다. 물론 프로그램을로드 할 때와 응용 프로그램이 참조를 실행하는 동안 설정을로드하는 변수가있는 것이 좋습니다. 이렇게하면 응용 프로그램이 닫히고 나면 변수의 현재 값을 설정에 저장할 수 있습니다. –

+1

'AppVars '란 무엇입니까? 한 곳을 저장하고 다른 곳에서 읽는 것 같습니다. – Tergiver

답변

2

당신은 설정을 다시로드해야합니다이 유일한 작품 디버그 모드 (AFAIK)에서 실행하지 않는 것이

Properties.Settings.Default.Reload(); 

참고.

+0

어디에서 추가해야합니까? Properties.Settings.Default.Save() 바로 다음에 넣습니다. 실행 파일을 실행했지만 여전히 운이 없다. – Testifier

+0

또한 fbFolderBrowser.SelectedPath = AppVars.LastSelectedFolder 이전에 추가했습니다. 운이 없다. : S – Testifier

+0

@Testifier이 줄을 btnBrowse_Click 메서드의 시작 부분에 추가합니다. 릴리스 모드에서 이것을 시도하는 것을 잊지 마십시오. – daryal

0

여기에 내 코드를 게시 할 예정입니다. 왜냐하면 내가 본 모든 대답을 해결하지 못했기 때문입니다. 이렇게하면 위치를 저장하고 파일 찾아보기 대화 상자의 설정을 다시로드합니다 (경로를 가져올 때 파일 및 폴더 찾아보기 대화 상자가 약간 씩 다름) ... 위의 대답은 세션 전용 (?) 인 것 같습니다. ... 구성 설정의 ClickOnce 응용 프로그램의 업데이트 손실 방지하기 위해 새로운 방법으로 업데이트

코드 : 나는이처럼 사용

public class ConfigSettingsDictionary 
    { 
     public Dictionary<String, String> ConfigSettings = new Dictionary<String, String>(); 
    } 
    ConfigSettingsDictionary MyConfigurationSettings = new ConfigSettingsDictionary(); 


private void SaveConfig() 
    { 
     using (System.IO.StreamWriter sw = new System.IO.StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\YOUR_APP_NAME_PLUS_UNIQUE_VALUE.config")) 
     { 

      foreach (var pair in MyConfigurationSettings.ConfigSettings) 
      { 
       sw.WriteLine(pair.Key + "=" + pair.Value); 
      } 
     } 

    } 
    private void LoadConfig() 
    { 

     if (System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\YOUR_APP_NAME_PLUS_UNIQUE_VALUE.config")) 
     { 
      var settingdata = System.IO.File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\YOUR_APP_NAME_PLUS_UNIQUE_VALUE.config"); 
      for (var i = 0; i < settingdata.Length; i++) 
      { 
       var setting = settingdata[i]; 
       var sidx = setting.IndexOf("="); 
       if (sidx >= 0) 
       { 
        var skey = setting.Substring(0, sidx); 
        var svalue = setting.Substring(sidx + 1); 
        if (!MyConfigurationSettings.ConfigSettings.ContainsKey(skey)) 
        { 
         MyConfigurationSettings.ConfigSettings.Add(skey, svalue); 
        } 
       } 
      } 
     } 


    } 
    private void UpdateConfig(Dictionary<String, String> keyvaluepairs) 
    { 

     foreach (var pair in keyvaluepairs) 
     { 
      if (!MyConfigurationSettings.ConfigSettings.ContainsKey(pair.Key)) 
      { 
       MyConfigurationSettings.ConfigSettings.Add(pair.Key, pair.Value); 
      } 
      else 
      { 
       MyConfigurationSettings.ConfigSettings[pair.Key] = pair.Value; 
      } 
     } 


    } 

(이 파일 찾아보기 대화 상자에서 선택한 폴더에 저장

및 또한 선택한 파일) :

string lastused = ""; 

     if (MyConfigurationSettings.ConfigSettings.ContainsKey("openFileDialog2_last_used")) 
     { 
      MyConfigurationSettings.ConfigSettings.TryGetValue("openFileDialog2_last_used", out lastused); 
     } 


     if (lastused != "") 
     { 
      openFileDialog2.InitialDirectory = lastused; 
     } 
     else 
     { 
      openFileDialog2.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
     } 


     string filestring = ""; 
     if (template_filename == "") 
     { 
      try 
      { 
       if (openFileDialog2.ShowDialog() == DialogResult.OK) 
       { 


        filestring = openFileDialog2.FileName; 
        String chosenPath = Path.GetDirectoryName(openFileDialog2.FileName); 
        Dictionary<String, String> settings_to_save = new Dictionary<String, String>(); 

        settings_to_save.Add("openFileDialog2_last_used", chosenPath); 
        settings_to_save.Add("openFileDialog2_last_used_template_file", filestring); 
        UpdateConfig(settings_to_save); 
} 
     else return; 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("There was an error.", "Invalid File", MessageBoxButtons.OK); 
       return; 
      } 
private void YOURFORMNAME_Load(object sender, EventArgs e) 
    { 
// Load configuration file   
LoadConfig(); 
    } 
private void YOURFORMNAME_FormClosing(object sender, FormClosingEventArgs e) 
    { 
// Save configuration file 
     SaveConfig(); 
    } 
+0

좋아, 그래서 여기 내 자신의 솔루션을 만드는 결국 ... 그것은 사전을 사용합니다 : – pcalkins

+0

나는 "LoadConfig(); 메인 클래스 생성자에서 ... "InitializeComponents();"바로 뒤에. – pcalkins