使用C#winForm做一个多选题小软件
窗体的设计
这里主要应用了CheckBox来制作多选框。
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Multiple_choice
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void buttonOK_Click(object sender, EventArgs e)
{
string Right_Ans = "ABCD";//正确答案
string msg="";//我的选择
//收集选项
foreach (Control c in Controls)
{
if (c is CheckBox)
{
if (((CheckBox) c).Checked)
msg = msg + ((CheckBox)c).Text;
}
}
//因为foreach的遍历顺序特殊,所以需要对msg进行排序
char[] temp = msg.ToCharArray();
ABCD_Sort(temp);
string str = new string(temp);
//判断答案
if (str == Right_Ans)
{
MessageBox.Show("您的选择是\n" + str + "\n恭喜你,答案正确!", "提示", MessageBoxButtons.OK);
}
else
{
MessageBox.Show("您的选择是\n" + str + "\n正确答案是:" + Right_Ans, "提示",MessageBoxButtons.OK);
}
}
private void button_analysis_Click(object sender, EventArgs e)
{
MessageBox.Show("马克思、恩格斯总结的巴黎公社的经验主要有:" +
"无产阶级政权是为人民服务的机关;" +
"必须打碎旧的国家机器,建立无产阶级的新型国家;" +
"无产阶级革命取得成功并保持胜利果实的首要条件是要有革命的武装;" +
"必须建立无产阶级政党,发挥党的政治领导作用。因此ABCD全选","解析"
, MessageBoxButtons.OK);
}
//针对List<string>格式的排序(没用上)
public List<string> listSort(List<string> strList)
{
if (strList != null && strList.Count > 0)
{
strList.Sort((x,y)=>-x.CompareTo(y));
strList.Sort((x,y)=>x.CompareTo(y));
}
return strList;
}
//对char[]进行排序
public void ABCD_Sort(char[] array)
{
for (int i = 0; i < array.Length-1; i++)
{
for (int j = 0; j < array.Length-1; j++)
{
if (array[j] > array[j + 1])
{
char t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
}
}
}
}
容易出现问题的点
//收集选项
foreach (Control c in Controls)
{
if (c is CheckBox)
{
if (((CheckBox) c).Checked)
msg = msg + ((CheckBox)c).Text;
}
}
这里的遍历顺序时按照Controls的创建顺序逆序遍历,所以如果对字符串msg进行排序们就会得到如图结果(永远得不到正确答案),所以需要对msg进行排序后,再判断。