2014-02-26 46 views
0

編輯:我正在嘗試閱讀WPF C#應用程序中雜項(本例中爲7)文本文件的內容。因此,我使用以下已編輯的代碼:在WPF C#應用程序中閱讀各種文本文件的內容

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」;頭部)&第2行:過程(如「https://www.google.de/」;對於CLICK EVENT)。

不過,我得到這個結果(對不起,隱藏的信息,但它包含的業務事項): ERROR MESSAGE

所以它似乎工作。但不幸的是,當我點擊其中的一個,我收到以下錯誤信息:

德國「明鏡指數滯後außerhalbDES Bereichs爾搞亂nicht是負面的UND克萊納ALS死Auflistung盛參數名稱:首頁」

英語:「索引超出範圍必須爲非負數且小於集合的大小參數名:索引」

它的工作原理,當我改變了以下內容:

之前: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

問題修復! ;) 解決方案是創建一個新的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); 
      } 
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集合中的項目數,然後您就會知道問題所在。

+0

非常感謝您的幫助。首先讓我評論一下:我說「0 + i」是因爲我希望應用程序在下一輪創建菜單項時轉到下一個項目。所以,我說i + = 2在下一輪循環中轉到下一個項目。收集聲明編輯。另外我可以說,這個系列中有14個項目 - 我使用Verknüpfung.Count來統計它們。 – gpuk360