首先,我看了这个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;
}
.
.
.
如果我选择第一个文件- 5月18日Muni RosterDetailReport.csv -并将其名称保存在字符串变量中,那么是否有办法在下次运行ShowDialog时将该文件过滤掉在同一个目录中?
换句话说,在选择 5月18日Muni RosterDetailReport.csv 之后,是否可以将该名称作为过滤器反馈到ShowDialog
中?
我认为答案是否定的,但我只是在仔细检查。如果没有,那么是否可以通过订阅OpenFileDialog事件来解决该问题,如我在本文开头所指出的那样?
所以听起来,我可以使用OK事件来防止用户第二次选择第一个文件?我希望有人能回答这个问题。
答案 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;
}
}
}
}