在WPF C#应用程序中读取各种文本文件的内容
编辑:我正在尝试读取WPF C#应用程序中各种(本例中为7个)文本文件的内容。因此,我使用已编辑的以下代码:在WPF C#应用程序中读取各种文本文件的内容,c#,wpf,list,collections,parameters,C#,Wpf,List,Collections,Parameters,编辑:我正在尝试读取WPF C#应用程序中各种(本例中为7个)文本文件的内容。因此,我使用已编辑的以下代码: try { List<string> Verknüpfung = new List<string>(); foreach (string Datei in Directory.GetFiles(V.PfadShortcuts, "*.txt")) {
try
{
List<string> Verknüpfung = new List<string>();
foreach (string Datei in Directory.GetFiles(V.PfadShortcuts, "*.txt"))
{
Verknüpfung.AddRange(File.ReadAllLines(Datei, Encoding.UTF8));
}
for (int i = 0; i <= Verknüpfung.Count - 1; i += 2)
{
Image Icon = new Image();
Icon.Source = new BitmapImage(new Uri(@"Images\Fugue Icons\document.png", UriKind.Relative));
Icon.Height = 16;
Icon.Width = 16;
Icon.Stretch = Stretch.None;
MenuItem MenuItem = new MenuItem();
MenuItem.Click += delegate { Process.Start(Verknüpfung[1 + i]); };
MenuItem.Header = Verknüpfung[0 + i];
MenuItem.Icon = Icon;
MenuItem.Padding = new Thickness(5);
MI_Verknüpfungen.Items.Add(MenuItem);
}
}
但是现在,当我单击其中一个菜单项时,应用程序运行所有进程(意味着我的集合中保存的所有7个“快捷方式”)——但是,错误消息消失了我如何管理只运行单击的流程?好吧,让我们分析一下您的问题。。。你说: 当我单击[代码]菜单项中的一个时,我得到以下错误消息: “索引超出范围。必须为非负且小于集合的大小。参数名称:索引” 因此,当您单击
菜单项时会出现问题。。。让我们看看单击MenuItem
时应该发生什么:
MenuItem.Click += delegate { Process.Start(Verknüpfung[0 + i]); };
宾果!这是您的索引
参数,您正在传入值0+i
。不过我很好奇。。。为什么0+i
,而这与i
相同?但是无论如何,i
等于什么呢
foreach (string Datei in Directory.GetFiles(V.PfadShortcuts, "*.txt"))
{
...
i += 2;
}
那是什么i+=2
但这意味着对于每个文件,您试图访问Verknüpfung
集合中的一个位置,该位置是您拥有的文件数的两倍。现在,您没有展示如何声明该集合,但是如果它是某种数组,那么我想如果它是I++
,那么I+=2
可能工作得更好
当然,如果您的文件中只有两行,那么这就可以解释了,但这是我从您的演示中所能猜到的最好的结果。如果这是不正确的,那么只需在单击处理程序中放置一个断点,然后检查i
的值和Verknüpfung
集合中的项数,然后您就会知道问题是什么。问题已修复!;)
解决方案是创建一个新的var(tmp)
for(int i=0;非常感谢您的帮助。首先让我评论一下:我说“0+i”因为我希望应用程序在创建菜单项的下一轮中转到下一项之后。所以,我说I+=2转到下一轮循环中的下一项之后。集合声明已编辑。此外,我可以说,集合中有14个项目-我使用Verknüpfung.Count对它们进行计数。
foreach (string Datei in Directory.GetFiles(V.PfadShortcuts, "*.txt"))
{
...
i += 2;
}
for (int i = 0; i <= Verknüpfung.Count - 1; i += 2)
{
Image Icon = new Image();
Icon.Source = new BitmapImage(new Uri(@"Images\Fugue Icons\document.png", UriKind.Relative));
Icon.Height = 16;
Icon.Width = 16;
Icon.Stretch = Stretch.None;
var tmp = i;
MenuItem MenuItem = new MenuItem();
MenuItem.Click += delegate { Process.Start(Verknüpfung[1 + tmp]); };
MenuItem.Header = Verknüpfung[0 + i];
MenuItem.Icon = Icon;
MenuItem.Padding = new Thickness(5);
MI_Verknüpfungen.Items.Add(MenuItem);
}