OpenFileDialog可以按名称过滤掉某些文件吗?

时间:2018-07-09 18:34:56

标签: c# .net filter showdialog fileopendialog

首先,我看了这个post。答案之一似乎为在ShowDialog中按名称过滤提供了希望。现在,这是我要做什么的描述:

我有这段C#代码:

private System.Windows.Forms.OpenFileDialog csv_file_open_dlg;
.
.
.
  csv_file_open_dlg.FileName = "";
  csv_file_open_dlg.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
  int rc = 0;


  if (csv_file_open_dlg.ShowDialog() == DialogResult.OK)
  {
     if (0 == m_csv_file_cmp_counter)
     {
        m_firstCsvFileSelected = csv_file_open_dlg.FileName;
     }
.
.
.

Files that appear in ShowDialog

如果我选择第一个文件- 5月18日Muni RosterDetailReport.csv -并将其名称保存在字符串变量中,那么是否有办法在下次运行ShowDialog时将该文件过滤掉在同一个目录中?

换句话说,在选择 5月18日Muni RosterDetailReport.csv 之后,是否可以将该名称作为过滤器反馈到ShowDialog中?

我认为答案是否定的,但我只是在仔细检查。如果没有,那么是否可以通过订阅OpenFileDialog事件来解决该问题,如我在本文开头所指出的那样?

编辑:

所以听起来,我可以使用OK事件来防止用户第二次选择第一个文件?我希望有人能回答这个问题。

1 个答案:

答案 0 :(得分:1)

鉴于无法按OpenFileDialog中的文件名进行过滤,这是我为防止用户两次加载相同文件所做的操作:

string m_firstFileLoaded; // a member variable of the class.
.
.
.
private void LoadCsvFile_Click(object sender, EventArgs e)
{
    printb.Enabled = false;
    csv_file_open_dlg.FileName = "";
    csv_file_open_dlg.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
    int rc = 0;

    if (csv_file_open_dlg.ShowDialog() == DialogResult.OK)
    {
        if (0 == m_csv_file_cmp_counter)
        {
            m_firstFileLoaded = csv_file_open_dlg.FileName;
            m_ComparisionDirection = -1; // Resets first and second file toggling.
            m_csv_file_cmp_counter = 0;
            m_csv_file_first.set_csv_path(csv_file_open_dlg.FileName);
            rc = m_csv_file_first.map_csv();
            LoadCsvFile.Text = "Load next csv file";
            m_csv_file_cmp_counter++;
        }
        else
        {
            // If the file is already chosen, throw up a warning.
            if (0 == String.Compare(m_firstFileLoaded, csv_file_open_dlg.FileName))
            {
                MessageBox.Show("You have already loaded " + csv_file_open_dlg.FileName + " . Please select another file", "Attempt to reload first file", MessageBoxButtons.OK);
            }
            else
            {

                m_csv_file_next.set_csv_path(csv_file_open_dlg.FileName);
                rc = m_csv_file_next.map_csv();
                LoadCsvFile.Text = "Files loaded.";
                LoadCsvFile.Enabled = false;
                start_compare.Enabled = true;
            }
        }
    }
}