0

首先,我看过这篇文章。答案之一似乎为在 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;
     }
.
.
.

ShowDialog 中出现的文件

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

换句话说,在选择May 18 Muni RosterDetailReport.csv 之后,有没有办法将该名称反馈回ShowDialog, 作为过滤器?

我认为答案是否定的,但我只是在仔细检查。如果没有,是否有通过订阅 OpenFileDialog 事件的解决方法,如我在本文开头提到的帖子中所示?

编辑:

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

4

1 回答 1

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;
            }
        }
    }
}
于 2018-07-09T19:06:58.990 回答