📄 coursetablebodycontrol.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace 课程安排
{
[Serializable]
public partial class CourseTableBodyControl : UserControl
{
private const int DefaultCols = 8;
private const int DefaultRows = 9;
private const int CourseControlsWidth = 105;
private const int CourseControlsHeight = 45;
private List<CourseArrangeControl> courseControls = new List<CourseArrangeControl>();
// 用于获取编排的课程结果,以及载入已经编排的课程
private List<BodyCourseItem> courses = null;
public List<BodyCourseItem> Courses
{
get { GetCourse(); return courses; }
set { courses = value; SetCourse(); }
}
// 设置可供选择的课程,以及该课程相关的教师
private List<BodySubjectItem> subjects = null;
public List<BodySubjectItem> Subjects
{
get { return subjects; }
set { subjects = value; InitControl(); }
}
// 设置课程表中的时间集合,已及该时间有空的教师
private List<BodyTimeItem> times = null;
public List<BodyTimeItem> Times
{
get { return times; }
set { times = value; InitControl(); }
}
// 上午的课程数量,默认值为4
private int monningCourseCount = 4;
public int MonningCourseCount
{
get { return monningCourseCount; }
set
{
if (value >= 2 && value <= 6)
monningCourseCount = value;
}
}
public CourseTableBodyControl()
{
InitializeComponent();
}
public void ClearAllText()
{
foreach (object o in this.Controls)
{
if (o is CourseArrangeControl)
{
(o as CourseArrangeControl).ClearText();
}
}
}
public void ClearAllItems()
{
foreach (object o in this.Controls)
{
if (o is CourseArrangeControl)
{
(o as CourseArrangeControl).ClearItems();
}
}
}
// 根据行数、列数常量等信息设置控件的最小规模
private void CourseTableBodyControl_Resize(object sender, EventArgs e)
{
int w = CourseControlsWidth * DefaultCols + 10;
int h = CourseControlsHeight * DefaultRows + 10;
if (this.Width != w)
this.Width = w;
if (this.Height != h)
this.Height = h;
}
private void InitControl()
{
if (this.times != null && this.subjects != null)
{
// 控制对每一节课程的控制
for (int i = 0; i < times.Count; i++)
{
int week = times[i].Week;
int courseOrder = times[i].CourseOrder;
string controlName = "courseArrangeControl" + week.ToString() + courseOrder.ToString();
foreach (object o in this.Controls)
{
if (o is CourseArrangeControl)
if ((o as CourseArrangeControl).Name.ToLower() == controlName.ToLower())
{
(o as CourseArrangeControl).Time = times[i];
(o as CourseArrangeControl).Subjects = subjects;
}
}
}
}
}
private void SetCourse()
{
if (this.courses == null)
this.courses = new List<BodyCourseItem>();
for (int i = 0; i < this.courses.Count; i++)
{
string controlName = "courseArrangeControl" + this.courses[i].Week.ToString() + this.courses[i].CourseOrder.ToString();
foreach (object o in this.Controls)
{
if (o is CourseArrangeControl)
if ((o as CourseArrangeControl).Name.ToLower() == controlName.ToLower())
{
(o as CourseArrangeControl).Course = this.courses[i];
}
}
}
}
private void GetCourse()
{
if (this.courses == null)
this.courses = new List<BodyCourseItem>();
this.courses.Clear();
foreach (object o in this.Controls)
{
if (o is CourseArrangeControl)
{
this.courses.Add((o as CourseArrangeControl).Course);
}
}
}
#region 内部类
[Serializable]
public class BodyCourseItem
{
private int week;
public int Week
{
get { return week; }
set { week = value; }
}
private int courseOrder;
public int CourseOrder
{
get { return courseOrder; }
set { courseOrder = value; }
}
private string subject;
public string Subject
{
get { return subject; }
set { subject = value; }
}
private string teacher;
public string Teacher
{
get { return teacher; }
set { teacher = value; }
}
}
[Serializable]
public class BodySubjectItem
{
private string subjectName;
public string SubjectName
{
get { return subjectName; }
set { subjectName = value; }
}
private List<string> teachers;
public List<string> Teachers
{
get { return teachers; }
set { teachers = value; }
}
}
[Serializable]
public class BodyTimeItem
{
private int week;
public int Week
{
get { return week; }
set { week = value; }
}
private int courseOrder;
public int CourseOrder
{
get { return courseOrder; }
set { courseOrder = value; }
}
private List<string> teachers;
public List<string> Teachers
{
get { return teachers; }
set { teachers = value; }
}
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -