我将Multiselect
设置为true,以便能够同时加载多个文件。问题是它忽略了用户选择文件的顺序,FileNames
的列表总是相同的(如果我以不同的顺序选择同一组文件)。
我的问题是:是否有可能实现所需的行为?(存储路径在相同的顺序作为选择).
List<string> filePaths = new List<string>();
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Multiselect = true;
dlg.DefaultExt = ".txt";
// dlg.Filter = my filter //
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
foreach (string file in dlg.FileNames)
{
}
}
字符串
1条答案
按热度按时间zlhcx6iw1#
由于
OpenFileDialog
是一个密封类,它可能需要以某种形式进行黑客攻击。我个人的黑客攻击方法是使用一个轮询循环,调用P/pocketke,以便在选择文件名时抓取保存文件名的子窗口,当发生变化时,维护一个外部列表,我们称之为NamesInOrder
,它是新选择的任何文件名的FIFO。在这种情况下,我首先选择了B,然后是C和A。
x1c 0d1x的数据
字符串
的
显示打开文件对话框的方法
型
正在检测OpenFileDialog的hWnd
虽然OpenFileDialog的标题默认为“Open”,但调用
GetWindowText
将返回空,除非我们显式地设置一个可识别的值,在本例中使用const string OPEN_FILE_TITLE = "Open"
。一旦我们获得它,我们将枚举它的子窗口。型
找到正确的子窗口并读取其文本
我们正在寻找一个类为“ComboBoxEx 32”的子窗口。
型
提取文件名
检索此窗口文本时,请使用
RegEx
分隔多个文件名,其中名称用引号括起并用空格分隔。型