持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
一、前言
今天早上,还在上班路上的我,突然收到初中老师的微信。
问我最近有没有空帮他搞一个教室点名系统。
这,必须有空啊。
这不,抽空,三下五除二,一小时左右搞定。
二、功能明细
- 可以选择不同教室
- 可以修改学生名单
- 可以随机抽点学生
- 可以将软件置顶,PPT放映的时候也能点名
三、效果演示
[video(video-8mSeyJiA-1631801981315)(type-bilibili)(url-player.bilibili.com/player.html… Framework)的教室点名系统V1.0)]
四、界面布局
- 一个ListView,用来显示教室列表
- 一个Label,用来显示学生名单
- 一个Label,用来显示被抽中的学生名称
- 一个
随机点名
按钮 - 一个
刷新
按钮,用来刷新目录下面的txt文件 - 一个
置顶
按钮,用来控制程序是否置顶 - 最后一个Label,用来宣示主权,哈哈
五、代码详解
5.1 获取班级列表
- 班级列表是通过读取exe目录下面的txt文件
- 有几个txt文件就等于有几个班级
- 老师想要增删改查班级,直接增删改查exe目录下面的txt文件即可
List<string> roomList = new List<string>();
private void getRoomList()
{
List<ListViewItem> items = new List<ListViewItem>();
DirectoryInfo root = new DirectoryInfo(System.Environment.CurrentDirectory);
roomList.Clear();
foreach (FileInfo f in root.GetFiles())
{
if (f.FullName.Contains(".txt"))
{
Console.WriteLine(f.FullName);
List<string> rows = new List<string>();
rows.Add(f.Name);
items.Add(new ListViewItem(rows.ToArray()));
roomList.Add(f.FullName);
}
}
roomListView.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
roomListView.Items.Clear();
roomListView.Items.AddRange(items.ToArray());
roomListView.EndUpdate(); //结束数据处理,UI界面一次性绘制。
if (roomListView.Items.Count > 0)
{
roomListView.Items[0].Selected = true;
}
}
复制代码
- 在
Form1_Load
时调用 - 在刷新按钮点击是调用
private void Form1_Load(object sender, EventArgs e)
{
//列表初始化
roomListView.Columns.Clear();
roomListView.Columns.Add("教室", 120);
getRoomList();
}
private void updateTxtBtn_Click(object sender, EventArgs e)
{
getRoomList();
}
复制代码
5.2 获取学生名单
- 对应班级的学生名单是存在对应txt文件下
- 通过换行来分割人名
- 获取对应班级的学生名单只要读取对应txt文件内容即可
private void getNameList(string path)
{
StreamReader streamReader = new StreamReader(path, Encoding.UTF8);
string content;
string str = "";
nameList.Clear();
while ((content = streamReader.ReadLine()) != null)
{
//Console.WriteLine(content.ToString());
str += (content.ToString()+"、");
nameList.Add(content.ToString());
}
streamReader.Close();
str = str.Substring(0, str.Length-1); //去掉最后一个顿号、
nameListLabel.Text = str;
}
复制代码
- 在班级被选中的时候,获取该班级的学生名单
private void roomListView_SelectedIndexChanged(object sender, EventArgs e)
{
if (roomListView.SelectedItems.Count <= 0)
return;
int index = roomListView.SelectedItems[0].Index;
Console.WriteLine("roomListView_SelectedIndexChanged index="+index);
if (roomList.Count> index)
{
getNameList(roomList[index]);
}
}
复制代码
5.3 置顶功能
- 置顶TopMost是指该窗体是否始终显示在此属性未设置为true的所有其他窗体之上。
private void topMostBtn_Click(object sender, EventArgs e)
{
if (this.TopMost)
{
this.TopMost = false;
topMostBtn.Text = "置顶";
}
else
{
this.TopMost = true;
topMostBtn.Text = "取消置顶";
}
}
复制代码
觉得好,就一键三连呗(点赞+收藏+关注)