2

質問のランダム化されたテストを画像で表示するC#プログラムを書いています。

テストには10​​の質問があります。また、ImageListに10枚の画像を追加しました。私の質問はランダムに選択され、解決するクイズごとに表示されます。それぞれの質問とその写真をお伝えしたいと思います。

ファイルからロードする質問のコレクションがあります。

Collection<question> questions = new Collection<question>();
StreamReader sr = new StreamReader("quiz.txt");
while (!sr.EndOfStream) 
{ 
    question i = new question();
    i.text = sr.ReadLine();
    questions.Add(i);
}
sr.Close(); 

Random r = new Random(); 
int x = r.Next(questions.Count);

ImageListツールボックスからコントロールを追加しました。次に、画像コレクションエディタを使用して画像を追加しました。私が使用したコードの場合:

pictureBox1.Image = imageList1.Images[a]; 

これは次の場合に停止しますa > imageList1.Images.Count

current_questionとImageListからのその画像をどのように相関させることができますか?

アップデート

 public class question
{
 public bool displayed = false;
 public string text, answer1, answer2;
}

 private void button1_Click_1(object sender, EventArgs e)
 {
        string line = questions[current_question].text;
        int delimiter = line.IndexOf(':');
        int imageIndex = int.Parse(line.Substring(0, delimiter));
        string questionText=line.Substring(delimiter + 1);
        pictureBox1.Image = imageList1.Images[imageIndex];//I still have problems with       
                                                          //images
        if (nr > questions.Count)
                                 {
                                  button1.Enabled = false;
                                  }
        else
        {
            Random r = new Random();
            int x;
            do   { x = r.Next(questions.Count); } 
                  while (questions[x].displayed == true);
            textBox1.Text = questionText;// now it doesn't appear the index;thank you
            radioButton1.Text = questions[x].answer1; // is not from the current
                                                      //  question
            radioButton2.Text = questions[x].answer2;// is not from the current
                                                     //  question
            questions[x].displayed= true;
            current_question = x;
        }
      }
4

1 に答える 1

2

quiz.txt ファイルに画像インデックスを含めてみてください。

3:バーのフーは何ですか?
10:どうやってウィジェットを追加できますか?
4:なぜフーよりもバーを選ぶのですか?

次に、プログラムでランダムな質問を選択する時点で、画像インデックスと質問のテキストを抽出できます。

int x = r.Next(questions.Count); 
// intrebari is a variable of class 'question'
string line = intrebari[x].text; 
// find the colon
int delimiter = line.IndexOf(':'); 
// the image index is left of the colon
int imageIndex = int.Parse(line.Substring(0, delimiter)); 
// and the question itself is right of the colon
string questionText = line.Substring(delimiter + 1); 
// set the image in the picture box
pictureBox1.Image = imageList1.Images[imageIndex]; 

次にquestionText、表示する文字列を示します。imageIndex正しい画像を選択するために使用できimageList1.Images[imageIndex]ます。PictureBox に割り当てます。

質問と画像インデックスがまだ表示されている場合は、line変数を表示すべきときに変数を表示していることを意味しquestionTextます。また、インデックスは 0 から始まるため、画像インデックスを質問に割り当てる際の「off by one」エラーに注意してください。

編集

private void button1_Click_1(object sender, EventArgs e) 
 { 
    if (nr > questions.Count) 
    { 
        button1.Enabled = false; 
    } 
    else 
    { 
        Random r = new Random(); 
        int x; 
        do   { x = r.Next(questions.Count); }  
              while (questions[x].displayed == true); 

        string line = questions[x].text; 
        int delimiter = line.IndexOf(':'); 
        int imageIndex = int.Parse(line.Substring(0, delimiter)); 
        string questionText=line.Substring(delimiter + 1); 
        pictureBox1.Image = imageList1.Images[imageIndex];//I still have problems with        

        textBox1.Text = questionText;// now it doesn't appear the index;thank you 
        radioButton1.Text = questions[x].answer1; // is not from the current 
                                                  //  question 
        radioButton2.Text = questions[x].answer2;// is not from the current 
                                                 //  question 
        questions[x].displayed= true; 
        current_question = x; 
    } 
  } 
于 2012-04-09T13:33:47.697 に答える