2016-12-28 14 views
-3

私はかなり一般的なC#プログラミングに慣れていて、質問、回答、選択肢があるWindowsフォームでクイズを作成しようとしていました。質問、回答、選択肢は別々のクラスに分かれています。 Windowsフォームの部分は、4つのボタンといくつかのテキストボックスで、選択する選択肢(1-4)を選択できます。使用されるすべてのリストは文字列型btwです。 しかし、プログラムを起動しようとすると、TypeInitializerが例外を投げたと言われます。 InnerExceptionは、インデックスが範囲外であったことです。 HRESULTは-2146233036で、ケースには、それは任意のヘルプですが、全体のスタックトレースにある:プログラムを起動しようとすると内部の例外「インデックスが境界外にありました」

VED quizforreal.Display..ctor() VED quizforreal.Program.Main()は、i C:\ Users \ユーザーアンダース\ document \ visual studio 2015 \ Projects \ quizforreal \ quizforreal \ Program.cs:linje 19 ved System.AppDomain._nExecuteAssembly(RuntimeAssemblyアセンブリ、String [] args) ved System.AppDomain.ExecuteAssembly(String assemblyFile、Evidence assemblySecurity、String) [] args) ved Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() ved System.Threading.ThreadHelper.ThreadStart_Context(オブジェクト状態) ved System.Threading.Executio (ExecutionContext executionContext、ContextCallbackコールバック、オブジェクト状態、ブールpreserveSyncCtx) ved System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ExecuteContext executionContext、ContextCallbackコールバック、オブジェクト状態、ブールpreserveSyncCtx) 、ContextCallbackコールバック、状態オブジェクト) VED System.Threading.ThreadHelper.ThreadStart()

ここでは、コードです:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace quizforreal 
{ 
public partial class Display : Form 
{ 
    int tæller = 0; 
    private static Choices choiceobj = new Choices(); 
    private static Questions questobj = new Questions(); 
    private static Answers answerobj = new Answers(); 
    List<string> choices1list = choiceobj.getChoiceOne(); 
    List<string> choices2list = choiceobj.getChoiceTwo(); 
    List<string> choices3list = choiceobj.getChoiceThree(); 
    List<string> choices4list = choiceobj.getChoiceFour(); 
    List<string> questlist = questobj.getQuestions(); 
    List<string> answerlist = answerobj.getAnswers(); 

    public Display() 
    { 
     InitializeComponent();   
} 

    public void skifter() 
    { 


     switch (tæller) 
     { 
      case 0: 
       choice1.Text = choices1list[0]; 
       choice2.Text = choices2list[0]; 
       choice3.Text = choices3list[0]; 
       choice4.Text = choices4list[0]; 
       quest.Text = questlist[0]; 
       break; 
      case 1: 
       choice1.Text = choices1list[1]; 
       choice2.Text = choices2list[1]; 
       choice3.Text = choices3list[1]; 
       choice4.Text = choices4list[1]; 
       quest.Text = questlist[1]; 
       break; 
      case 2: 
       choice1.Text = choices1list[2]; 
       choice2.Text = choices2list[2]; 
       choice3.Text = choices3list[2]; 
       choice4.Text = choices4list[2]; 
       quest.Text = questlist[2]; 
       break; 
      case 3: 
       choice1.Text = choices1list[3]; 
       choice2.Text = choices2list[3]; 
       choice3.Text = choices3list[3]; 
       choice4.Text = choices4list[3]; 
       quest.Text = questlist[3]; 
       break; 
      case 4: 
       choice1.Text = choices1list[4]; 
       choice2.Text = choices2list[4]; 
       choice3.Text = choices3list[4]; 
       choice4.Text = choices4list[4]; 
       quest.Text = questlist[4]; 
       break; 
     } 
    } 


    private void choice1_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void choice2_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void choice3_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void choice4_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     switch (tæller) 
     { 
      case 0: 
       if (choice1.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 1: 
       if (choice1.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 2: 
       if (choice1.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 3: 
       if (choice1.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 4: 
       if (choice1.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     switch (tæller) 
     { 
      case 0: 
       if (choice2.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 1: 
       if (choice2.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 2: 
       if (choice2.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 3: 
       if (choice2.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 4: 
       if (choice2.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
     } 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     switch (tæller) 
     { 
      case 0: 
       if (choice3.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 1: 
       if (choice3.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 2: 
       if (choice3.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 3: 
       if (choice3.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 4: 
       if (choice3.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
     } 
    } 

    private void button4_Click(object sender, EventArgs e) 
    { 
     switch (tæller) 
     { 
      case 0: 
       if (choice4.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 1: 
       if (choice4.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 2: 
       if (choice4.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 3: 
       if (choice4.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
      case 4: 
       if (choice4.Text == answerlist[0]) 
       { 
        tæller++; 
       } 
       else 
       { 
        tæller = 0; 
       } 
       break; 
     } 
    } 
} 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace quizforreal 
{ 
public class Choices 
{ 
    private List<string> choice1list = new List<string>(); 
    private List<string> choice2list = new List<string>(); 
    private List<string> choice3list = new List<string>(); 
    private List<string> choice4list = new List<string>(); 


    public Choices() 
    { 
     choice1list[0] = "mulighed1(1)"; 
     choice1list[1] = "mulighed1(2)"; 
     choice1list[2] = "mulighed1(3)"; 
     choice1list[3] = "mulighed1(4)"; 
     choice1list[4] = "mulighed1(5)"; 

     choice2list[0] = "mulighed2(1)"; 
     choice2list[1] = "mulighed2(2)"; 
     choice2list[2] = "mulighed2(3)"; 
     choice2list[3] = "mulighed2(4)"; 
     choice2list[4] = "mulighed2(5)"; 

     choice3list[0] = "mulighed3(1)"; 
     choice3list[1] = "mulighed3(2)"; 
     choice3list[2] = "mulighed3(3)"; 
     choice3list[3] = "mulighed3(4)"; 
     choice3list[4] = "mulighed3(5)"; 

     choice4list[0] = "mulighed4(1)"; 
     choice4list[1] = "mulighed4(2)"; 
     choice4list[2] = "mulighed4(3)"; 
     choice4list[3] = "mulighed4(4)"; 
     choice4list[4] = "mulighed4(5)"; 

    } 

    public List<string> getChoiceOne() 
    { 
     return choice1list; 
    } 

    public List<string> getChoiceTwo() 
    { 
     return choice2list; 
    } 

    public List<string> getChoiceThree() 
    { 
     return choice3list; 
    } 

    public List<string> getChoiceFour() 
    { 
     return choice4list; 
    } 

} 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace quizforreal 
{ 
    public class Questions 
    { 
     private List<string> questionslist = new List<string>(); 


     public Questions() 
     { 
      questionslist[0] = "Spørgsmål 1"; 
      questionslist[1] = "Spørgsmål 2"; 
      questionslist[2] = "Spørgsmål 3"; 
      questionslist[3] = "Spørgsmål 4"; 
      questionslist[4] = "Spørgsmål 5"; 
     } 


     public List<string> getQuestions() 
     { 
      return questionslist; 
     } 


    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace quizforreal 
{ 
    class Answers 
    { 
     private static Choices choicesobj = new Choices(); 
     List<string> choices1list = choicesobj.getChoiceOne(); 
     List<string> choices2list = choicesobj.getChoiceTwo(); 
     List<string> choices3list = choicesobj.getChoiceThree(); 
     List<string> choices4list = choicesobj.getChoiceFour(); 

     private List<string> answerlist = new List<string>(); 


     public Answers() 
     { 
      answerlist[0] = choices1list[0]; 
      answerlist[1] = choices3list[1]; 
      answerlist[2] = choices4list[2]; 
      answerlist[3] = choices1list[3]; 
      answerlist[4] = choices2list[4]; 

     } 


     public List<string> getAnswers() 
     { 
      return answerlist; 
     } 
    } 
} 


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace quizforreal 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Display()); 
     } 
    } 
} 

は、あなたたちは事前に:)感謝を助けることを願って!

+4

さて、私たちが見るべきコードがない場合は、あなたのコードのバグを見つけるのに役立つと思いますか?それはどのように働くでしょうか? –

+0

存在しないリスト内の要素にアクセスしようとしています。デバッグしてどこを見つけるか。 – Carcigenicate

+0

おっと、ごめんなさい - 私はそれを付け加えて誓ったことがあります – sunero4

答えて

0

"TypeInitializerが例外をスローしました"は、静的コンストラクタまたはフィールド初期化子にエラーがあったことを意味します。あなたのフォームクラスは静的フィールドを持っていますprivate static Choices choiceobj = new Choices();Choicesのコンストラクタを見ると、インデクサを使ってリストに項目を追加しようとしているのがわかります。リストがそれほど大きくない場合は例外をスローします。

public class Choices 
{ 
    private List<string> choice1list = new List<string>(); 
    ... 

    public Choices() 
    { 
     choice1list.Add("mulighed1(1)"); 
     choice1list.Add("mulighed1(2)"); 
     ... 
+0

ありがとうございます!どのように私はそれを逃したか分からない、私はすべてのコンストラクタでそれをやった。私は時々配列とリストを混ぜると思う。それは今始まります、とてもありがとうございます:) – sunero4

関連する問題