Object Array,C#,无法访问数组中的单个元素

时间:2015-02-12 12:58:33

标签: c# arrays

我使用C#以窗口形式创建问卷调查应用程序。我尝试访问数组中的单个元素,但程序打印数组中的所有元素。 代码:

 public object arrayq (int d)
    {
        object[] question = new object[3];

        question[0] = Q1.Text;
        question[1] = Q2.Text + (Q2.Visible = true) + (question2.Visible = true) + (question1.Visible = false) + (Q1.Visible = false);
        question[2] = Q3.Text + (question3.Visible = true);
        return question[d];
    }

这是我尝试访问数组的按钮中的以下代码。

private void button1_Click(object sender, EventArgs e)
    {


        if (Q1a.Checked || Q1b.Checked || Q1c.Checked)
        {
            int k = 1;
            arrayq(k);
        }
        else
        {
            MessageBox.Show("Please enter your answer" + "\n" + "Please click Skip Button if you want to skip the question","Warning message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

    }

程序访问数组中的问题[1]和问题[2]并同时打印出问题2和3。我不明白为什么程序会这样做。

非常感谢

2 个答案:

答案 0 :(得分:0)

通过运行代码,在Q1,Q2和Q3(标签?)可见或隐藏的两种情况下,我都希望它隐藏Q1并变为可见Q2(来自问题[1]和Q3(来自问题[] 2])。

通过运行arrayq(int d),程序将读取所有行,而不管返回的是什么。

我建议使用条件语句,如:

public object arrayq (int d)
{
    if(d=1)
    {
        Q2.Visible = true;
        question2.Visible = true;
        question1.Visible = false;
        Q1.Visible = false
    }
    else if(d=2){
        question3.Visible = true
    }
    object[] question = new object[3];

    question[0] = Q1.Text;
    question[1] = Q2.Text;
    question[2] = Q3.Text ;
    return question[d];
}

答案 1 :(得分:0)

创建一个简单的类来帮助您解决问题,例如

public class Question
{
    public int QuestionId { get; set; }
    public string Text { get; set; }
    public bool IsVisible { get; set; }
    public bool IsChecked { get; set; }

    public Question()
    {
        SetDefault(0, "", false, false);
    }
    public void Question(int questionId, string text, bool isVisible, bool isChecked)
    { 
        SetDefault(questionId, text, isVisible, isChecked);
    }

    private void SetDefault(int questionId, string text, bool isVisible, bool isChecked)
    {
       QuestionId = questionId;
       Text = text;
       IsVisible = isVisible;
       IsChecked = isChecked;
    }
}

在表单中保留一个局部变量,如下所示,并将其填入您的数据:

List<Question> Questions = new List<Question>();
...
...
private void GenerateQuestions()
{
    Questions.Clear();
    Questions.Add(new Question(1, Q1.Text, Q1.Visible, Q1.IsChecked));
    Questions.Add(new Question(2, Q2.Text, Q2.Visible, Q2.IsChecked));
    // and so on
}

现在要得到一个具体的问题(即问题#1),只需:

Question question1 = Questions.Find(q=> q.QuestionId == 1);