我每次单击按钮时,只是逐个显示文本块中文件夹的文件名。但它直接从目录中提供了最后一个文件名。请提出任何建议。
C#
private void Button_Click(object sender, RoutedEventArgs e)
{
int i = 0;
string[] allFiles = Directory.GetFiles(Folder);
string startWithThis = text.Text.ToUpper();
string files = "";
lstFiles = new List<string>();
foreach (string s in allFiles)
{
string file = s.Replace(Folder, string.Empty);
if (file.ToUpper().StartsWith(startWithThis))
{
lstFiles.Add(file);
text.Text = lstFiles.ElementAt(i);
i++;
}
}
}
答案 0 :(得分:2)
此行导致问题 -
text.Text = lstFiles.ElementAt(i);
您实际上是用当前文件名替换文本框的所有内容
将其替换为 -
text.Text = text.Text + lstFiles.ElementAt(i);
或者,如果您需要新行中的每个文件名 -
text.Text = text.Text + Environment.NewLine + lstFiles.ElementAt(i);
这将单击显示所有文件。
现在如果你需要在每次点击时只显示一个文件名,你可以将List<string>
作为公共变量保存在文件夹中的所有文件列表中,然后在每次点击时将文本框添加到下一个文本框中此列表中的项目
答案 1 :(得分:1)
List<string> dirs = new List<string>(Directory.EnumerateDirectories(path));
foreach (var dir in dirs)
{
comboBox1.Items.Add(dir.Substring(dir.LastIndexOf("\\") + 1));
}
我现在使用这段代码来填充带有目录名的组合框。如果用文本块名称替换comboBox1,它应该可以工作。
答案 2 :(得分:1)
你应该合并而不是重写这些名字;一个简单的修正案
text.Text += ", " + lstFiles.ElementAt(i);
更好的方法是使用 Linq :
var files = Directory
.EnumerateFiles(Folder)
.Select(file => Path.GetFileName(file))
.Where(name => name.StartsWith(startWithThis, StringComparison.OrdinalIgnoreCase));
text.Text = String.Join(", ", files);
myComboBox.Items.AddRange(files.ToArray());