winForm开发--Controls

           最近在做一个选择题的功能,因为每页显示的题的数量不确定,所以我就用了一个用户控件,自己添加一个用户控件,非常简单,就是一个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 ,那么他们就会形成一个互斥的事件,而且必定是有一个是选中的,所以我就再添加一个,让他隐藏并且窗体一启动就是选中状态,这样的话就能很好的显示了。

        

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值