2016-12-14 6 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.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参照)。
ご覧のとおり、この問題は1行の修正ではありません。

関連する問題