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

时间:2014-02-26 22:04:34

标签: 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"))
            {
                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个文本文件。每个包含以下内容:第1行:标题(如“Google”;用于HEADER)&amp;第2行:处理(如“https://www.google.de/”;对于CLICK EVENT)。

但是,我得到了这个结果(对不起隐藏信息,但它包含业务问题): ERROR MESSAGE

所以它似乎有效。但不幸的是,当我点击其中一个时,我收到以下错误消息:

德语:“Der IndexlagaußerhalbdesBereichs。Er muss nicht negativ und kleiner als die Auflistung sein。Parametername:index”

英语:“索引超出范围。必须是非负数且小于集合的大小。参数名称:索引”

当我更改以下内容时,它有效:

之前:MenuItem.Click += delegate { Process.Start(Verknüpfung[1 + i]); };

之后:MenuItem.Click += new RoutedEventHandler(MenuItem_Click);

public void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        for (int i = 0; i <= Verknüpfung.Count - 1; i += 2)
        {
            Process.Start(Verknüpfung[1 + i]);
        }
    }

但是现在,当我点击其中一个菜单项时,应用程序运行所有进程(意味着我的集合中保存了所有7个“快捷方式”) - 但是,错误消息消失了。 如何管理仅运行点击的流程?

2 个答案:

答案 0 :(得分:0)

好吧,让我们分析你的问题......你说:

  

当我点击[MenuItem s]中的一个时,收到以下错误消息:

     
    

“索引超出范围。必须是非负数且小于集合的大小。参数名称:索引”

  

因此,当您点击MenuItem时遇到问题...让我们看一下点击MenuItem时您声明的内容:

MenuItem.Click += delegate { Process.Start(Verknüpfung[0 + i]); };

宾果!有index参数,您传递的值为0 + i。我很好奇......为什么0 + i,当它与i相同时?但无论如何,i等于什么?:

foreach (string Datei in Directory.GetFiles(V.PfadShortcuts, "*.txt"))
{
    ...
    i += 2;
}
那是什么? i += 2但这意味着,对于每个文件,您都试图访问两次两次的Verknüpfung集合中的位置您拥有的文件数。现在你没有展示你是如何声明该集合的,但是如果它是某种类型的数组,那么我猜想i += 2如果是i++则可能会更好。

当然,如果你的文件只有两行,那就可以解释一下,但这是我能从你所展示的内容中猜到的最好的。如果这不正确,那么只需在Click处理程序中放置一个断点并检查i的值和Verknüpfung集合中的项目数,然后您就会知道问题所在是

答案 1 :(得分:0)

问题已解决! ;) 解决方案是创建一个新的var(tmp)。

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