2016-12-14 86 views
0

我有一個列表變量,我創建了一個迭代器來打印出它的內容。它的工作在控制檯應用程序,但是當我嘗試使用Windows窗體(GUI)來做到這一點它不起作用MessageBox不顯示變量

Program.cs的

namespace gui 
{ 
    static class Program 
    { 
     public class studentdata 
     { 
     public string id, name, password, academicyear, finishedcourseslist, ipcourseslist; 
     public int noCoursesF, noCoursesIP; 
     public List<string> coursesF; 
     public List<string> coursesIP; 
     public studentdata() 
     { 
      id = "2015123"; 
      password = "Student"; 
      coursesF = new List<string>(); 
      coursesIP = new List<string>(); 
     } 

     public studentdata(string ID, string NAME, string PASSWORD) 
     { 
      id = ID; 
     } 

     **public void view_finished_courses() 
     { 
      List<string> finished = coursesF; 
      foreach (string n in finished) 
      { 
       finishedcourseslist += n; 
      } 
      MessageBox.Show(finishedcourseslist, "Finished courses"); 
     } 

     public void view_ip_courses() 
     { 
      List<string> progress = coursesIP; 
      foreach (string m in progress) 
      { 
       ipcourseslist += m; 
      } 
      MessageBox.Show(ipcourseslist, "Finished courses"); 
     }** 
    } 

    public class Admin 
    { 
     public string name, password; 

     public Admin() 
     { 
      name = "Admin"; 
      password = "Admin"; 
     } 
    } 

    //functionssssss 
    internal static studentdata studentSearch(string IDsearch) 
    { 
     FileStream FS = new FileStream("Students.txt", FileMode.Open); 
     StreamReader SR = new StreamReader(FS); 

     studentdata std = new studentdata(); 

     while (SR.Peek() != -1) 
     { 
      string z = SR.ReadLine(); 

      String[] Fields; 
      Fields = z.Split(','); 

      if (IDsearch.CompareTo(Fields[0]) == 0) 
      { 
       std.id = Fields[0]; 
       std.password = Fields[1]; 
       std.name = Fields[2]; 
       std.noCoursesF = int.Parse(Fields[3]); 
       int currentField = 4; 
       for (int course = 0; course < std.noCoursesF; course++) 
       { 
        std.coursesF.Add(Fields[currentField]); 

        currentField++; 
       } 

       std.noCoursesIP = int.Parse(Fields[currentField]); 
       currentField++; 
       for (int course = 0; course < std.noCoursesIP; course++) 
       { 
        std.coursesIP.Add(Fields[currentField]); 
        currentField++; 
       } 
       std.academicyear = Fields[currentField]; 

       SR.Close(); 
       return std; 
      } 
      else continue; 
     } 
     SR.Close(); 
     studentdata araf = new studentdata(); 
     return araf; 
    } 
} 

FORM.CS

namespace gui 
{ 
    public partial class Form3 : Form 
    { 
     Program.studentdata student = new Program.studentdata(); 

     public Form3() 
     { 
      InitializeComponent(); 
     } 

     private void label1_Click(object sender, EventArgs e) 
     { 

     } 

     private void button5_Click(object sender, EventArgs e) 
     { 

     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      student.view_finished_courses(); 
     } 

     private void button6_Click(object sender, EventArgs e) 
     { 
      student.view_ip_courses(); 
     } 
    } 
} 

輸出是一個空的消息框,我不知道爲什麼不添加變量。

+1

您是否調試瞭解變量中的內容? –

+1

歡迎來到Stackoverflow。你應該確保你有一個極簡主義的「工作」版本的問題。這對於我們爲您「調試」的文本來說非常重要。 –

回答

0

更換的MessageBox符合

MessageBox.Show(string.Join(",", coursesF.ToArray()), "Finished courses"); 
+0

'finishedcourseslist'是一個字符串 – ColinM

+0

給出未處理的異常錯誤..即使我嘗試使用ToString – user3229833

+0

對不起,我不好使用CourseF和不需要for循環也 – Mohit

0

好像你的代碼是不完整的。在單擊button4後執行的代碼中沒有任何地方,您將向coursesF添加項目。看來你正在添加這一行的項目:std.coursesF.Add(Fields[currentField]); 這行在你的函數studentSearch(IDsearch),該函數永遠不會被調用。
在此函數中,您獲得了一個字符串z,其中保存了學生的所有數據(string z = SR.ReadLine())。你必須以某種方式填充這個字符串z。您可以在表單中使用TextBox並將值傳遞給字符串,使用文本文件中的字符串或使用控制檯輸入(請參閱:Get input from console into a form)。
正如你所看到的問題不是一個線路修復。