编辑:我正在尝试阅读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)。
但是,我得到了这个结果(对不起隐藏信息,但它包含业务问题):
所以它似乎有效。但不幸的是,当我点击其中一个时,我收到以下错误消息:
德语:“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个“快捷方式”) - 但是,错误消息消失了。 如何管理仅运行点击的流程?
答案 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);
}