2013-08-28 60 views
1

我有這種方法返回給用戶顯示結果的消息框。但對於多個結果,每個結果都會顯示消息窗口。我如何創建它,以便將結果放入數組中,然後在一個消息框中將所有結果顯示給用戶?創建返回結果數組以顯示在消息框中

foreach (KeyValuePair<string, int> kvp in Comparer) 
      { 
       if (kvp.Value != 0) 
       { 
        mismatches++; 
        string InWhich = kvp.Value > 0 ? firstFile : secondFile; 
        MessageBox.Show("Extra value \n"+kvp.Key+" \nfound in file " + InWhich); 
        if (Math.Abs(kvp.Value) != 1) 
         MessageBox.Show(Math.Abs(kvp.Value)+ "times"); 
       } 
      } 

回答

2

使用StringBuilder建立字符串中的循環,就像這樣:

System.Text.StringBuilder theStringBuilder = new System.Text.StringBuilder(); 
foreach (KeyValuePair<string, int> kvp in Comparer) 
{ 
    if (kvp.Value != 0) 
    { 
     mismatches++; 
     string InWhich = kvp.Value > 0 ? firstFile : secondFile; 
     theStringBuilder.AppendLine("Extra value \n"+kvp.Key+" \nfound in file " + InWhich); 
     if (Math.Abs(kvp.Value) != 1) 
      theStringBuilder.AppendLine(Math.Abs(kvp.Value)+ "times"); 
     } 
    } 
} 

現在可以顯示所有的內容在StringBuilder,就像這樣:

// Display all results in message box 
MessageBox.Show(theStringBuilder.ToString()); 

更新:

要存儲每個文件的更改,請使用List<string>,像這樣:

var firstFileChanges = new List<string>(); 
var secondFileChanges = new List<string>(); 

System.Text.StringBuilder theStringBuilder = new System.Text.StringBuilder(); 
foreach (KeyValuePair<string, int> kvp in Comparer) 
{ 
    if (kvp.Value != 0) 
    { 
     mismatches++; 
     string InWhich = kvp.Value > 0 ? firstFile : secondFile; 

     if(InWhich == firstFile) 
     { 
      firstFileChanges.Add(kvp.Key); 
     } 
     else 
     { 
      secondFileChanges.Add(kvp.Key); 
     } 
    } 
} 

if(firstFileChanges.Count > 0) 
{ 
    theStringBuilder.Append("First file changes: "); 

    int counter1 = 0; 
    foreach(string change1 in firstFileChanges) 
    { 
     if(counter1 > 0) 
     { 
      theStringBuilder.Append(", "); 
     } 

     theStringBuilder.Append(change1); 

     counter1 += 1; 
    } 

    theStringBuilder.AppendLine(); 
} 

if(secondFileChanges.Count > 0) 
{ 
    theStringBuilder.Append("Second file changes: "); 

    int counter2 = 0; 
    foreach(string change2 in secondFileChanges) 
    { 
     if(counter2 > 0) 
     { 
      theStringBuilder.Append(", "); 
     } 

     theStringBuilder.Append(change2); 

     counter2 += 1; 
    } 
} 

MessageBox.Show(theStringBuilder.ToString()); 
+0

,如果我想一個變化添加到特定文件我可以爲它創建一個stringbuilder嗎?所以我沒有得到「文件A加2,文件A加狗...」,並有文件A加:2,狗。 ? – Masriyah

+0

@Masriyah - 當然,你可以有多個'StringBuilder',但我不確定你的意思是「更改某個文件」? –

+0

這裏我有兩個文件,所以對第一個文件或第二個文件進行更改。因此,如果第一個文件所做的更改將會聲明第一個文件,並列出在該文件中所做的所有更改。而不是命名該文件,那麼更改和相同的文件名將顯示多次 – Masriyah

2

您可以使用StringBuilder如下

StringBuilder sb = new StringBuilder(); 
foreach (KeyValuePair<string, int> kvp in Comparer) 
{ 
    if (kvp.Value != 0) 
    { 
     mismatches++; 
     string InWhich = kvp.Value > 0 ? firstFile : secondFile; 
     sb.AppendLine("Extra value \n" + kvp.Key + " \nfound in file " + InWhich + (Math.Abs(kvp.Value) != 1 ? ("\n" + Math.Abs(kvp.Value) + "times") : string.Empty)); 
    } 
} 
MessageBox.Show(sb.ToString()); 

或者您可以使用LINQ

MessageBox.Show(string.Join("\n" ,Comparer.GroupBy(x => x.Value > 0) 
        .Select(g => string.Join("\n" , 
          g.Select(l=> "Extra value \n" + l.Key + (Math.Abs(l.Value) != 1 ? ("\n" + Math.Abs(l.Value) + "times") : string.Empty))) + 
           " \nfound in file " + (g.Key ? firstFile : secondFile)))); 
+0

我得到一個錯誤,指出我不能從字符串轉換爲布爾 – Masriyah

+0

@Masriyah檢查我更新的答案 – Damith

+0

我喜歡linq我會試試 – Masriyah

1
foreach (KeyValuePair<string, int> kvp in Comparer) 
     { 
      if (kvp.Value != 0) 
      { 
       mismatches++; 
       string InWhich = kvp.Value > 0 ? firstFile : secondFile; 
       //load the data in to a string - use string append 
      } 
     } 

//outside the foreach loop 
MessageBox.Show(....);