PanelNumber.cs 10.6 KB
/*-------------------------------------------------------------------------------------------
 * 数字反馈参数面板
 * 修改:杨斌 2012-03-13
 * ----------------------------------------------------------------------------------------*/
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 PanelNumber : UserControl, IPanel
    {
        TagSet mTagSet = null;
        public TagSet TagSet
        {
            get { return mTagSet; }
            set
            {
                mTagSet = value;
                ucResponsePara.TagSet = value;
                ucKeypadPara.TagSet = value;
            }
        }

        /// <summary>
        /// 是否填空题
        /// 杨斌 2015-01-12
        /// </summary>
        private bool IsTextInput = false;
        public PanelNumber(bool isTextInput)
        {
            IsTextInput = isTextInput;

            InitializeComponent();

            FrmSystemSet.LanguageSetEvent += new FrmSystemSet.LanguageSetEventHander(FrmSystemSet_LanguageSetEvent);
            FrmVoteBar.PanelEnabledEvent += new FrmVoteBar.PanelEnabledEventHander(FrmVoteBar_PanelEnabledEvent);
            pnlScoreAnswer.Resize += pnlScoreAnswer_Resize;
            //设置控件大小
            //杨斌 2015-04-10
            //ucResponsePara.HideVoteRate();
            ucResponsePara.ShowSet(true, false);

            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;
            }

            //杨斌 2012-06-25

            ResizePanel();
        }

        void pnlScoreAnswer_Resize(object sender, EventArgs e)
        {
            int pos = pnlScoreAnswer.ClientSize.Width / 2;
            int w = pos - 3;
            lblScoreWrong.Left = pos;
            //lblScoreWrong.Width = w;

            nudScoreWrong.Left = pos;
            //nudScoreWrong.Width = w;
        }

        public PanelNumber()
            : this(false)
        {


        }

        private void ResizePanel()
        {
            ucKeypadPara.cboOptionMode.SelectedIndex = -1;
            //ucKeypadPara.cboOptionMode.Enabled = false;
            //ucKeypadPara.cboOptionMode.Visible = false;
            //ucKeypadPara.lblOptionMode.Visible = false;
            //ucKeypadPara.gbxKeypadSet.Height = ucKeypadPara.cboModifyMode.Height + 30;
            ucKeypadPara.ReSetSize(false, true, false, true);//杨斌 2015-02-27
        }

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

        void FrmSystemSet_LanguageSetEvent()
        {
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
            //修改标志 2012-04-17 赵丽 语言切换数据刷新不准确
            string Unrestrict = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限");
            cboDec.Text = TagSet.GetValue(TagKey.Number_DecimalFormat).Value.ToString() == ""
                ? Unrestrict : TagSet.GetValue(TagKey.Number_DecimalFormat).Value.ToString();
            cboMin.Text = TagSet.GetValue(TagKey.Number_LowRange).Value.ToString() == ""
                ? Unrestrict : TagSet.GetValue(TagKey.Number_LowRange).Value.ToString();
            cboMax.Text = TagSet.GetValue(TagKey.Number_HighRange).Value.ToString() == ""
                ? Unrestrict : TagSet.GetValue(TagKey.Number_HighRange).Value.ToString();
        }

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

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

            ResponseType type = ResponseTypeName.GetEnum(TagSet.GetValue(TagKey.ResponseType).Value);
            IsTextInput = (type == ResponseType.Text);

            txtCorrectAnswer.MaxLength = IsTextInput ? 255 : 10;//杨斌 2019-07-08

            cboMax.SelectedIndex = 0;
            cboMin.SelectedIndex = 0;
            cboDec.SelectedIndex = 0;
            string Unrestrict = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限");
            string sMaxValue = TagSet.LoadValue(TagKey.Number_HighRange, "").Value;
            string sMinValue = TagSet.LoadValue(TagKey.Number_LowRange, "").Value;

            cboMax.Text = sMaxValue == "" ? Unrestrict : sMaxValue;
            cboMin.Text = sMinValue == "" ? Unrestrict : sMinValue;
            cboDec.Text = TagSet.LoadValue(TagKey.Number_DecimalFormat, "").Value;

            ControlOper.TrySetNumericUpDownValue(nudScoreRight, TagSet.LoadValue(TagKey.Number_ScoreRight, nudScoreRight.Value).ToInt);
            ControlOper.TrySetNumericUpDownValue(nudScoreWrong, TagSet.LoadValue(TagKey.Number_ScoreWrong, nudScoreWrong.Value).ToInt);

            LoadCorrectAnswer();
        }

        private void SaveCorrectAnwser()
        {
            TagSet.SetValue(TagKey.Number_CorrectAnswer, txtCorrectAnswer.Text);
        }

        private void LoadCorrectAnswer()
        {
            txtCorrectAnswer.Text = TagSet.LoadValue(TagKey.Number_CorrectAnswer, "").Value;
        }

        private void PanelNumber_Load(object sender, EventArgs e)
        {
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
        }

        private void txtCorrectAnswer_TextChanged(object sender, EventArgs e)
        {
            SaveCorrectAnwser();

            Globals.SunVoteARSAddIn.PPTEdit.RefreshLabelEdit(DataLabelType.ANSWER);//杨斌 2012-03-15
            //2012-10-08 赵丽 全角半角转换
            int cpos = txtCorrectAnswer.SelectionStart;
            txtCorrectAnswer.Text = PublicFunction.ToDBC(txtCorrectAnswer.Text);
            this.txtCorrectAnswer.Select(this.txtCorrectAnswer.TextLength, 0);
            txtCorrectAnswer.SelectionStart = cpos;

            PPTOper.SetTableNumberRankCorrect(Globals.SunVoteARSAddIn.PPTEdit.SlideEdit);//杨斌 2015-01-16
        }

        private void nudScoreRight_ValueChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Number_ScoreRight, nudScoreRight.Value);
        }

        private void nudScoreWrong_ValueChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Number_ScoreWrong, nudScoreWrong.Value);
        }

        private void cboMax_TextChanged(object sender, EventArgs e)
        {
            //修改标志 2012-04-17 赵丽 语言切换数据刷新不准确
            TagSet.SetValue(TagKey.Number_HighRange, cboMax.Text == GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限") ? "" : cboMax.Text);
            if (TagSet.GetValue(TagKey.Number_HighRange).Value.ToString() == "")
                cboMax.Text = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限");
        }

        private void cboMin_TextChanged(object sender, EventArgs e)
        {
            //修改标志 2012-04-17 赵丽 语言切换数据刷新不准确
            TagSet.SetValue(TagKey.Number_LowRange, cboMin.Text == GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限") ? "" : cboMin.Text);
            if (TagSet.GetValue(TagKey.Number_LowRange).Value.ToString() == "")
                cboMin.Text = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限");
        }

        private void cboDec_SelectedIndexChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Number_DecimalFormat, cboDec.Text == GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限") ? "" : cboDec.Text);
            if (TagSet.GetValue(TagKey.Number_DecimalFormat).Value.ToString() == "")
                cboDec.Text = GlobalInfo.SysLanguage.LPT.ReadString(this.Name, "Unrestricted", "不限");
        }

        private void cboMax_KeyPress(object sender, KeyPressEventArgs e)
        {
            //阻止从键盘输入键
            e.Handled = true;
            //当输入为0-9的数字、小数点、回车和退格键时不阻止

            //允许最小分数和最大分数只能是整数
            if (e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == 13 || e.KeyChar == (char)8)
            {
                e.Handled = false;
            }

            if (e.KeyChar == '.')
            {
                for (int i = 0; i < cboMax.Text.Length; i++)
                {
                    if (cboMax.Text.Substring(i, 1) == ".")
                    {
                        e.Handled = false;
                        break;
                    }
                }
            }//只允许有一个“.”
        }

        private void txtCorrectAnswer_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (IsTextInput)//杨斌 2015-01-12
                return;

            try
            {

                // 特殊键, 不处理   
                if ((int)e.KeyChar <= 31) return;
                if (txtCorrectAnswer.Text.Split('.')[1].Length > 3)
                {
                    e.Handled = true;
                    return;
                }
                if (txtCorrectAnswer.Text.Split('.').Count<string>() > 4)
                {
                    e.Handled = true;
                    return;
                }
            }
            catch { }
            // 非数字键, 放弃该输入   
            if ((e.KeyChar != '.') && (e.KeyChar != '-'))
            {
                if (!char.IsDigit(e.KeyChar))
                {
                    e.Handled = true;
                    return;
                }
            }
            if (txtCorrectAnswer.Text.IndexOf('.') > 0)
            {
                if ((txtCorrectAnswer.Text.Length - txtCorrectAnswer.Text.IndexOf('.') - 1) == 4)
                {
                    e.Handled = true;
                    return;
                }
            }

        }

        private void ucResponsePara_Load(object sender, EventArgs e)
        {

        }
    }
}