最近在做一个选择题的功能,因为每页显示的题的数量不确定,所以我就用了一个用户控件,自己添加一个用户控件,非常简单,就是一个GroupBox里边添加几个radioButton和几个Label,做界面非常的容易,就是用一下for循环,添加几个用户控件,所以只需要一个简单的循环就能添加,但是做题的时候就有点难了。
因为我是循环添加的用户控件,所以我一开始就在愁这个答题怎么做,因为是分页的,我是每次翻页的时候保存还是一做题的时候就保存。最后权衡了一下还是决定答题的时候就保存题目。下边是我的一些做法。
找到窗体中的单选按钮
首先是保存循环控件,看看哪个控件的radioButton被选中,这个就需要Controls了,他就是一个容器,从里边可以找到任何窗体中的控件,或者任何容器中控件,例如我要找到groupBox中的控件。
foreach (Control item in groupBox.Controls)
{
if (item is RadioBtnA && qe.ExamAnswer == item.Text)
{
RadioButton rb = (RadioButton)item;
rb.Checked = true;
}
}
或者遍历窗体中的控件,如下:
foreach (Control item in groupBox.Controls)
{
if (item is RadioBtnA && qe.ExamAnswer == item.Text)
{
RadioButton rb = (RadioButton)item;
rb.Checked = true;
}
}
保存每一道做过的题
然后就是做题的时候去判断这个题是怎么做的了。在每一个radioButton的事件中添加保存事件,如下:
private void radioButton4_CheckedChanged(object sender, EventArgs e)
{
try
{
this.value = radioButton4.Text;
int numFlag = UpdateSelectQuestionRecord(value);
if (numFlag == 0)
{
MessageBox.Show(this, "信息保存失败,请联系管理员", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
return;
}
}
catch (Exception)
{
}
}
界面展示
这样一个选择题的答题保存就可以做好了,具体的界面我是这样子的,因为要的急,就做了一天,感觉还能用。如果有需要的,可以参考一下啊。
数据回显
当然还有一个数据回显的功能,例如做过了就能下载加载的时候再显示,这个简单,我们就在加载控件的时候把答案放上去就可以了。代码如下:
/// <summary>
/// 将信息加载到控件上
/// </summary>
/// <param name="qe"></param>
/// <param name="count"></param>
public void BindDataToSelf(SelectQuestionRecordEntity_01 qe, int count)
{
try
{
label1.Text = qe.QuestionContent;
label2.Text = qe.OptionA.Replace("\r\n", "<br>");
label3.Text = qe.OptionB.Replace("\r\n", "<br>");
label4.Text = qe.OptionC.Replace("\r\n", "<br>");
label5.Text = qe.OptionD.Replace("\r\n", "<br>");
int num = 0;
Choice1.Name = qe.QuestionID;
if (qe.ExamAnswer != string.Empty)
{
foreach (Control item in Choice1.Controls)
{
if (item is RadioButton && qe.ExamAnswer == item.Text)
{
RadioButton rb = (RadioButton)item;
rb.Checked = true;
}
}
}
num = count + 1;
Choice1.Text = "选择题" + num;
}
catch (Exception)
{
}
}
这样一个选择题就做好了,这里之所以有一个radioButton5,是因为如果我们在一个容器里边放入一组radioButton ,那么他们就会形成一个互斥的事件,而且必定是有一个是选中的,所以我就再添加一个,让他隐藏并且窗体一启动就是选中状态,这样的话就能很好的显示了。