我使用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。我不明白为什么程序会这样做。
非常感谢
答案 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);