在WPF C#应用程序中读取各种文本文件的内容

在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")) {

编辑:我正在尝试读取WPF C#应用程序中各种(本例中为7个)文本文件的内容。因此,我使用已编辑的以下代码:

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);
            }