PanelGrade.cs 13.6 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.PowerPoint;
using GeneralLib;

namespace SunVoteARSPPT
{
    public partial class PanelGrade : UserControl, IPanel, IPanelChange
    {
        TagSet mTagSet = null;
        public TagSet TagSet
        {
            get { return mTagSet; }
            set
            {
                mTagSet = value;
                ucResponsePara.TagSet = value;
                ucKeypadPara.TagSet = value;
            }
        }

        public PanelGrade()
        {
            InitializeComponent();
            FrmSystemSet.LanguageSetEvent += new FrmSystemSet.LanguageSetEventHander(FrmSystemSet_LanguageSetEvent);
            FrmVoteBar.PanelEnabledEvent += new FrmVoteBar.PanelEnabledEventHander(FrmVoteBar_PanelEnabledEvent);
            gbxChoise.Resize += gbxChoise_Resize;
            //设置控件大小
            //杨斌 2015-04-10
            ucResponsePara.ShowSet(true, true);
            ucKeypadPara.Top = ucResponsePara.Bottom + 6;

            this.Height = ucKeypadPara.Bottom;
            //GlobalInfo.SysLanguage.SetLanguage(this.Name, this);

            //杨斌 2012-06-11
            switch (GlobalInfo.OEMLogo)
            {
                case OEMLogos.oem3eAnalyzer:
                    //ucKeypadPara.Visible = false;
                    //if (ucKeypadPara.cboSubmitMode.SelectedIndex != 0)
                    //    ucKeypadPara.cboSubmitMode.SelectedIndex = 0;
                    //this.Height = ucResponsePara.Bottom;
                    break;
                case OEMLogos.SunVote:
                default:
                    break;
            }
        }

        void gbxChoise_Resize(object sender, EventArgs e)
        {
            int pos = gbxChoise.ClientSize.Width / 2;
            int w = pos - 3;
            nudOptionCount.Left = pos;
            //nudOptionCount.Width = w;
        }

        void FrmVoteBar_PanelEnabledEvent(bool enabled)
        {
            this.Enabled = enabled;
        }

        void FrmSystemSet_LanguageSetEvent()
        {
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
            //杨斌 2019-02-28
            dgvScore.Columns[0].HeaderText = GlobalInfo.SysLanguage.LPT.ReadString("PanelChoise", "dgvScore_0", "序号");
            dgvScore.Columns[1].HeaderText = GlobalInfo.SysLanguage.LPT.ReadString("PanelChoise", "dgvScore_1", "分数");
            if (dgvScore.Columns.Count >= 3)
                dgvScore.Columns[2].HeaderText = dgvScore.Columns[0].HeaderText;
            if (dgvScore.Columns.Count >= 4)
                dgvScore.Columns[3].HeaderText = dgvScore.Columns[1].HeaderText;
        }

        private void btnChartSet_Click(object sender, EventArgs e)
        {
            new FrmChartSet().ShowDialog();
        }

        public Color PanelColor
        {
            get
            {
                return this.BackColor;
            }
            set
            {
                this.BackColor = value;
                gbxChoise.BackColor = value;
                ucResponsePara.BackColor = value;
                ucKeypadPara.BackColor = value;
            }
        }

        private void btnOptionText_Click(object sender, EventArgs e)
        {
            new FrmOptionTextSelect().ShowDialog();//杨斌 2013-01-24
        }

        /// <summary>
        /// 加载参数面板数据
        /// </summary>
        public void LoadData()
        {
            try
            {
                ucResponsePara.LoadData();
                ucKeypadPara.LoadData();

                ControlOper.TrySetNumericUpDownValue(nudOptionCount, TagSet.LoadValue(TagKey.Grade_OptionCount, nudOptionCount.Value).ToInt);

                LoadOptionScore();//加载选项分数
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void PanelGrade_Load(object sender, EventArgs e)
        {
            InitItemScore();//杨斌 2019-02-26
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
        }

        private void nudOptionCount_ValueChanged(object sender, EventArgs e)
        {
            //2012-06-08 选项个数改变时需要重新设置图表高度
            Globals.SunVoteARSAddIn.PPTEdit.CountChange = true;
            TagSet.SetValue(TagKey.Grade_OptionCount, nudOptionCount.Value);
            //修改标志 2012-05-2 赵丽 保存当前图表的位置
            PPTOper.SaveChartPosition(Globals.SunVoteARSAddIn.PPTEdit.SlideEdit, TagSet);
            if (!Globals.SunVoteARSAddIn.PPTEdit.LockOptionTextChange)//判断是否选项文本在修改,杨斌 2012-03-05
            {
                Globals.SunVoteARSAddIn.PPTEdit.ModifyOptionText(Convert.ToInt32(nudOptionCount.Value));
            }

            //杨斌 2019-02-26
            InitItemScore();
            LoadOptionScore();
            SaveOptionScore();//保存选项分数

            //2012-11-21 数据字体根据选项个数变化 赵丽
            PPTOper.SetFontSize(Convert.ToInt32(nudOptionCount.Value), TagSet);
            Globals.SunVoteARSAddIn.PPTEdit.InitChart(true, Globals.SunVoteARSAddIn.PPTEdit.SlideEdit, autoFit: true);
        }

        #region IPanelChange 成员

        public void ChangeData(TagKey tagKey, object value)
        {
            if (tagKey == TagKey.Grade_OptionCount)
                ControlOper.TrySetNumericUpDownValue(nudOptionCount, TagSet.LoadValue(tagKey, nudOptionCount.Value).ToInt);
        }

        #endregion

        private void InitItemScore()
        {
            //dgvScore.RowCount = 5;
            //for (int i = 0; i < dgvScore.Rows.Count; i++)
            //{
            //    dgvScore.Rows[0].Cells[0].Value = "1/A";
            //    dgvScore.Rows[0].Cells[1].Value = "0";
            //    dgvScore.Rows[0].Cells[2].Value = "2/B";
            //    dgvScore.Rows[0].Cells[3].Value = "0";
            //}
            int optionCount = (int)nudOptionCount.Value;

            bool colFirst = true;
            //杨斌 2019-02-28
            dgvScore.Columns[0].HeaderText = GlobalInfo.SysLanguage.LPT.ReadString("PanelChoise", "dgvScore_0", "序号");
            dgvScore.Columns[1].HeaderText = GlobalInfo.SysLanguage.LPT.ReadString("PanelChoise", "dgvScore_1", "分数");
            if (colFirst)//逐列,与正确答案的控件一致
            {
                if (optionCount <= 5)
                {
                    dgvScore.ColumnCount = 2;
                    dgvScore.RowCount = optionCount;
                }
                else
                {
                    dgvScore.ColumnCount = 4;
                    dgvScore.RowCount = 5;
                    dgvScore.Columns[2].HeaderText = dgvScore.Columns[0].HeaderText;
                    dgvScore.Columns[3].HeaderText = dgvScore.Columns[1].HeaderText;
                }
                ControlOper.SetGridRowH(dgvScore);//杨斌 2016-03-04
                for (int col = 0; col < dgvScore.Columns.Count; col++)
                    dgvScore.Columns[col].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

                int num = 0;
                for (int col = 0; col < dgvScore.Columns.Count; col += 2)
                {
                    for (int row = 0; row < dgvScore.Rows.Count; row++)
                    {
                        num++;
                        if (num <= optionCount)
                        {
                            dgvScore.Rows[row].Cells[col].Value = num;//PPTOper.FormatNumABC(num, true);//数字/字母
                            //加载分数
                            dgvScore.Rows[row].Cells[col + 1].Value = "0";
                        }
                        else
                        {
                            dgvScore.Rows[row].Cells[col].Value = "";
                            dgvScore.Rows[row].Cells[col + 1].Value = "";
                        }
                    }
                }
            }
            else//逐行
            {
                if (optionCount <= 1)
                {
                    dgvScore.ColumnCount = 2;
                    dgvScore.RowCount = 1;
                }
                else
                {
                    dgvScore.ColumnCount = 4;
                    dgvScore.RowCount = optionCount / 2 + ((optionCount % 2) > 0 ? 1 : 0);
                    dgvScore.Columns[2].HeaderText = dgvScore.Columns[0].HeaderText;
                    dgvScore.Columns[3].HeaderText = dgvScore.Columns[1].HeaderText;
                }
                ControlOper.SetGridRowH(dgvScore);//杨斌 2016-03-04
                int num = 0;
                for (int row = 0; row < dgvScore.Rows.Count; row++)
                {
                    for (int col = 0; col < dgvScore.Columns.Count; col++)
                    {
                        num++;
                        int m = col * 2;
                        if (num <= optionCount)
                        {
                            dgvScore.Rows[row].Cells[m].Value = PPTOper.FormatNumABC(num, true);//数字/字母
                            //加载分数
                            //double score = TagSet.LoadValue(TagSet.GetName(TagKey.Order_ScoreItem_) + num.ToString(), 0);
                            dgvScore.Rows[row].Cells[m + 1].Value = "0";
                        }
                        else
                        {
                            dgvScore.Rows[row].Cells[m].Value = "";
                            dgvScore.Rows[row].Cells[m + 1].Value = "";
                        }
                    }
                }
            }
        }

        private void dgvScore_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if ((e.ColumnIndex % 2) == 0) return;
            if ((e.RowIndex + 1 + (e.ColumnIndex - 1) / 2 * dgvScore.Rows.Count) > nudOptionCount.Value) return;

            dgvScore.BeginEdit(true);
        }

        private void dgvScore_MouseLeave(object sender, EventArgs e)
        {
            dgvScore.EndEdit();
        }

        private void dgvScore_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            SaveOptionScore();
        }

        private void LoadOptionScore()
        {
            string optionScore = TagSet.LoadValue(TagKey.Grade_ScoreOption, "").Value;
            
            int optionCount = (int)nudOptionCount.Value;

            Dictionary<int, double> dicScore = PublicFunction.GetItemScore(optionScore);

            int num = 0;
            for (int col = 0; col < dgvScore.Columns.Count; col += 2)
            {
                for (int row = 0; row < dgvScore.Rows.Count; row++)
                {
                    num++;
                    if (num <= optionCount)
                    {
                        //分数
                        if (dicScore.ContainsKey(num))
                            dgvScore.Rows[row].Cells[col + 1].Value = dicScore[num].ToString();
                        else
                            dgvScore.Rows[row].Cells[col + 1].Value = "0";
                    }
                }
            }
        }

        private void SaveOptionScore()
        {
            int optionCount = (int)nudOptionCount.Value;

            string optionScore = "";
            Dictionary<int, double> dicScore = new Dictionary<int, double>();

            int num = 0;
            for (int col = 0; col < dgvScore.Columns.Count; col += 2)
            {
                for (int row = 0; row < dgvScore.Rows.Count; row++)
                {
                    num++;
                    if (num <= optionCount)
                    {
                        double score = 0;
                        try
                        {
                            score = new ConvertOper(dgvScore.Rows[row].Cells[col + 1].Value.ToString()).ToDouble;
                            //限制分数。杨斌 2012-11-07
                            double scoreMin = -100;
                            double scoreMax = 100;
                            switch (GlobalInfo.OEMLogo)
                            {
                                case OEMLogos.oem3eAnalyzer:
                                    if (score < scoreMin)
                                    {
                                        score = scoreMin;
                                        dgvScore.Rows[row].Cells[col + 1].Value = score.ToString();
                                    }
                                    if (score > scoreMax)
                                    {
                                        score = scoreMax;
                                        dgvScore.Rows[row].Cells[col + 1].Value = score.ToString();
                                    }
                                    break;
                                default:
                                    break;
                            }
                        }
                        catch { score = 0; }
                        dicScore.Add(num, score);
                    }
                }
            }

            int[] aryNum = new int[dicScore.Count];
            double[] aryScore = new double[dicScore.Count];
            dicScore.Keys.CopyTo(aryNum, 0);
            dicScore.Values.CopyTo(aryScore, 0);
            for (int i = 0; i < dicScore.Count; i++)
            {
                if (aryScore[i] != 0)
                {
                    if ((optionScore.Length > 0))
                        optionScore += PublicFunction.SplitItemScore;//杨斌 2019-07-19
                    optionScore += aryNum[i].ToString() + "=" + aryScore[i].ToString();
                }
            }

            TagSet.SetValue(TagKey.Grade_ScoreOption, optionScore);
        }
    }
}