void Instance_GraduationPlanUpdated(object sender, UpdateGraduationPlanEventArgs e)
        {
            if (_InfoDictionary.ContainsKey(e.OldInfo))
            {
                ButtonItem item = _InfoDictionary[e.OldInfo];
                if (e.NewInfo != null)
                {
                    item.Tag = e.NewInfo;
                    //item.Text = e.NewInfo.Name;

                    SmartSchool.Evaluation.GraduationPlan.Validate.ValidateGraduationPlanInfo validater = new SmartSchool.Evaluation.GraduationPlan.Validate.ValidateGraduationPlanInfo();
                    if (validater.Validate(e.NewInfo, null))
                    {
                        item.Tooltip     = "";
                        item.ButtonStyle = eButtonStyle.TextOnlyAlways;
                        item.Image       = null;
                        item.Refresh();
                    }
                    else
                    {
                        item.Tooltip     = "驗證失敗,請檢查內容。\n否則使用此規劃表之學生將無法加入修課。";
                        item.Image       = Properties.Resources.warning1;
                        item.ButtonStyle = eButtonStyle.TextOnlyAlways;
                        item.Refresh();
                    }
                }
                else
                {
                    itemPanel1.Items.Remove(_InfoDictionary[e.OldInfo]);
                    _InfoDictionary.Remove(e.OldInfo);
                }
            }
            else
            {
                LoadGraduationPlan(false);
            }
        }
        void _BKWChecker_DoWork(object sender, DoWorkEventArgs e)
        {
            SmartSchool.Evaluation.GraduationPlan.Validate.ValidateGraduationPlanInfo validater = new SmartSchool.Evaluation.GraduationPlan.Validate.ValidateGraduationPlanInfo();
            List <GraduationPlanInfo> gplanList = (List <GraduationPlanInfo>)e.Argument;

            for (int i = 0; i < gplanList.Count; i++)
            {
                if (_BKWChecker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
                bool pass = validater.Validate(gplanList[i], null);
                _BKWChecker.ReportProgress((int)(((double)i * 100.0f) / gplanList.Count), new object[] { pass, gplanList[i] });
            }
        }