0

所以,我的 XML 文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<quiz>

</answers>
</question>

<!-- More questions here  -->

</quiz>

我的 Form1.cs 看起来像这样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;
using System.Drawing;

namespace WindowsFormsApplication1
{
    public partial class FormMain : Form
    {

基本上,所有四个按钮上都有问题而不是答案,并且在左下角的按钮下方,似乎有一个空白按钮。如何让问题显示 label1 在哪里以及答案在四个单独的按钮上?另外,当我开始添加多个问题时,我将如何做(用户显然无法继续下一个问题,除非他们得到前一个问题并且可以在开始时选择难度以显示一组不同的问题)。

我在这方面已经有一段时间了,我认为它需要一个全新的视角,因为我相对新手的 C# 大脑无法弄清楚。有人帮我吗?

4

2 回答 2

0

看看这个问题的答案。更容易处理的是将 XML 反序列化为您创建的具有匹配结构的类。

如何反序列化 XML 文档

更多信息在这里:http: //msdn.microsoft.com/en-us/library/58a18dwa.aspx

于 2013-02-25T23:26:42.673 回答
0

您每次在循环周围设置每个按钮的文本:

foreach (var question in _questions)
{
    button1.Text = question.QuestionText;
    button2.Text = question.QuestionText;
    button3.Text = question.QuestionText;
    button4.Text = question.QuestionText;
}

最后一次循环时,每个按钮都会将文本设置为最后一个问题的文本。

它看起来也有点奇怪,因为您有四个按钮定义为表单的字段,但是您在PopulateForm方法中创建了其他按钮,但对它们什么也没做。

您最好摆脱这些字段并直接使用新创建的按钮:

private void PopulateForm()
{
    int count = 0;

    foreach (var question in _questions)
    {
        var button = new Button();
        button.Size = new Size(60, 23);
        button.Location = new Point(100, 40 + (count * 30));
        button.Text = question.QuestionText;
        Controls.Add(button);
        count++;
    }
}

您必须将每个按钮的位置设置为不同的位置,否则它们将全部显示在同一个位置。


编辑:

通过查看 zip 文件中的代码,您想要的是(假设您的问题有四个答案):

private void PopulateForm()
{
    foreach (var question in _questions)
    {
        label1.Text = question.QuestionText;

        button1.Text = question.Answers[0];
        button2.Text = question.Answers[1];
        button3.Text = question.Answers[2];
        button4.Text = question.Answers[3];
    }
}
于 2013-02-25T23:26:53.173 回答