OpenFileDialog多选文件路径重复添加至List<>问题求助
问题原因
你循环里犯了个低级错误:MyDialog.FileName只会返回第一个选中文件的路径,不管选了多少个,每次循环都拿这个值,自然列表里全是第一个文件的重复项。而你遍历的MyDialog.FileNames才是所有选中文件的路径数组,循环变量file就是当前文件的完整路径,应该用它来代替MyDialog.FileName。
另外,原代码里把BitmapImage转成字符串存到列表里完全没必要——BitmapImage.ToString()返回的不是文件路径,而是类似System.Windows.Media.Imaging.BitmapImage这样的类型信息,根本不是你要的内容。
修正方案
分两种情况处理:
情况1:只想保存文件路径到List<string>
直接把循环变量file添加到列表即可(顺便给你的Filter补了个点:*jpg改成*.jpg,不然匹配不到带后缀的文件):
OpenFileDialog MyDialog = new OpenFileDialog(); MyDialog.Filter = "Picture (.jpg)|*.jpg|Picture (.jpeg)|*.jpeg|Picture (.png)|*.png"; MyDialog.Multiselect = true; if (MyDialog.ShowDialog() == true) { foreach (string file in MyDialog.FileNames) { FileListe.Add(file); // 直接添加文件路径 } }
情况2:要保存BitmapImage对象到List<BitmapImage>
把列表类型改成List<BitmapImage>,然后直接添加创建好的对象:
List<BitmapImage> FileListe = new List<BitmapImage>(); // 声明正确类型的列表 OpenFileDialog MyDialog = new OpenFileDialog(); MyDialog.Filter = "Picture (.jpg)|*.jpg|Picture (.jpeg)|*.jpeg|Picture (.png)|*.png"; MyDialog.Multiselect = true; if (MyDialog.ShowDialog() == true) { foreach (string file in MyDialog.FileNames) { FileListe.Add(new BitmapImage(new Uri(file))); // 添加BitmapImage对象 } }
内容的提问来源于stack exchange,提问作者fblechinger
相关产品推荐
相关产品推荐

