如何保留上次使用的文件夹并将其放入表单打开时的文本框中?

How to keep the last used folder and put it in a textbox when a form opens?

加载 C# 窗体时,我希望在属于默认登录用户的文本框中有一个文件夹。

我有输入和输出文件的文本框和按钮,当打开表单时,我希望用户看到他保存上一个输出文件的默认文件夹。

我该怎么做?

在解决方案资源管理器中双击项目 Properties 部分中的 Settings.settings

打开包含网格视图的参数向导。

在底部,添加一个名为 LastPath 的参数并将其设置为 string 类型并选择可以为空的默认值。

如果您选择将其设置为空(推荐),请在静态 Program class 中添加这些变量:

    static string UserDataFolderPath
      = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
      + Path.DirectorySeparatorChar
      + AssemblyCompany
      + Path.DirectorySeparatorChar
      + AssemblyTitle
      + Path.DirectorySeparatorChar;

    static string UserDocumentsFolderPath
      = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      + Path.DirectorySeparatorChar
      + AssemblyCompany
      + Path.DirectorySeparatorChar
      + AssemblyTitle
      + Path.DirectorySeparatorChar;

还有这些方法:

    static public string AssemblyCompany
    {
      get
      {
        object[] attributes = Assembly.GetExecutingAssembly()
                              .GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
        if ( attributes.Length == 0 )
        {
          return "";
        }
        return ( (AssemblyCompanyAttribute)attributes[0] ).Company;
      }
    }

    static public string AssemblyTitle
    {
      get
      {
        object[] attributes = Assembly.GetExecutingAssembly()
                              .GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
        if ( attributes.Length > 0 )
        {
          AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
          if ( titleAttribute.Title != "" )
          {
            return titleAttribute.Title;
          }
        }
        return Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
      }
    }

Main方法开头添加:

Directory.CreateDirectory(UserDataFolderPath);
Directory.CreateDirectory(UserDocumentsFolderPath);
if ( Properties.Settings.Default.LastPath == "" )
{
  Properties.Settings.Default.LastPath = UserDataFolderPath;
  Properties.Settings.Default.Save();
}

现在要获取它,您可以在表单的 FormLoad 事件中写入:

textBox1.Text = Properties.Settings.Default.LastPath;

放入FormClosed事件:

Properties.Settings.Default.LastPath = textBox1.Text;
Properties.Settings.Default.Save();

这里应该是你的 Program.cs:

using System;
using System.IO;
using System.Reflection;
using System.Windows.Forms;

namespace WindowsFormsAppTest
{

  static class Program
  {

    [STAThread]
    static void Main()
    {
      Directory.CreateDirectory(UserDataFolderPath);
      Directory.CreateDirectory(UserDocumentsFolderPath);
      if ( Properties.Settings.Default.LastPath == "" )
      {
        Properties.Settings.Default.LastPath = UserDataFolderPath;
        Properties.Settings.Default.Save();
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new FormTest());
    }

    static string UserDataFolderPath
      = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
      + Path.DirectorySeparatorChar
      + AssemblyCompany
      + Path.DirectorySeparatorChar
      + AssemblyTitle
      + Path.DirectorySeparatorChar;

    static string UserDocumentsFolderPath
      = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      + Path.DirectorySeparatorChar
      + AssemblyCompany
      + Path.DirectorySeparatorChar
      + AssemblyTitle
      + Path.DirectorySeparatorChar;

    static public string AssemblyCompany
    {
      get
      {
        object[] attributes = Assembly.GetExecutingAssembly()
                              .GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
        if ( attributes.Length == 0 )
        {
          return "";
        }
        return ( (AssemblyCompanyAttribute)attributes[0] ).Company;
      }
    }

    static public string AssemblyTitle
    {
      get
      {
        object[] attributes = Assembly.GetExecutingAssembly()
                              .GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
        if ( attributes.Length > 0 )
        {
          AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
          if ( titleAttribute.Title != "" )
          {
            return titleAttribute.Title;
          }
        }
        return Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
      }
    }

  }

}

还有你的Form.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsAppTest
{

  public partial class FormTest : Form
  {

    public FormTest()
    {
      InitializeComponent();
    }

    private void FormTest_Load(object sender, EventArgs e)
    {
      textBox1.Text = Properties.Settings.Default.LastPath;
    }

    private void FormTest_FormClosed(object sender, FormClosedEventArgs e)
    {
      Properties.Settings.Default.LastPath = textBox1.Text;
      Properties.Settings.Default.Save();
    }

  }

}