环境:
这是一个运动控制卡的运动控制程序,输入速度之后按方向键,能按照新的输入速度运动,速度控件为 tbSpeedX,主要功能就是更改速度值,并且保存速度,程序如下(先不谈论_leave还是_changed,这对本问题没有影响):
     private void tbSpeedX_Leave(object sender, EventArgs e)
        {
            //如果输入为空,则恢复之前的数值
             if (tbSpeedX.Text == "")
             {
                 tbSpeedX.Text = m_Global.m_MotionEx.m_dSpeed_X.ToString();
                 return;
             }
             //如果数值类型不对,则跳出
             try
             {
                 double d = Convert.ToDouble(tbSpeedX.Text);
             }
             catch (Exception)
             {
                 MessageBox.Show("数值有误,请重新输入!");
                 return;
             }             //获取控件值
             m_Global.m_MotionEx.m_dSpeed_X = Convert.ToDouble(tbSpeedX.Text);
             //保存到ini
            m_Tools.WriteIniStringEx("Speed", "X", m_Global.m_MotionEx.m_dSpeed_X.ToString(), m_Global.m_MotionEx.m_strControlCfgPath);
        }
这样写,启动程序之后都是正常的,输入新的速度,按方向键,轴都会按新的速度运动。因为还有其他N多的TextBox基本都是要按照这种写法来操作,那我就像把它封装成一个方法,然后直接调用,封装如下:
 /// <summary>
        /// 数值输入框Text操作,判断数值类型是否有误,并自动保存到ini文件。
        /// </summary>
        /// <param name="textBox">TextBox控件名。</param>
        /// <param name="parm">针对的变量。</param>
        /// <param name="lpAppName">节点名称([***])。</param>
        /// <param name="lpKeyName">键名称(key)。如果为null,则删除指定的节点及其所有的项目。</param>
        /// <param name="iniPath">保存为INI的全路径文件名。</param>
        public void TextInputByDouble(TextBox textBox,double parm,string lpAppName="",string lpKeyName="",string iniPath="")
        {
            //如果输入为空,则恢复之前的数值
            if (textBox.Text == "")
            {
                textBox.Text = parm.ToString();
                return;
            }
            //如果数值类型不对,则跳出
            try
            {
                double d = Convert.ToDouble(textBox.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("数值有误,请重新输入!");
                return;
            }            //获取控件值
            parm = Convert.ToDouble(textBox.Text);
            //保存到ini
            WriteIniStringEx(lpAppName, lpKeyName, parm.ToString(), iniPath);//本句是直接从初始化卡读取参数函数里复制而来
            
        }
调用的时候是这样的:
   private void tbSpeedX_Leave(object sender, EventArgs e)
        {
             m_Tools.TextInputByDouble(tbSpeedX, m_Global.m_MotionEx.m_dSpeed_X, "Speed", "X", m_Global.m_MotionEx.m_strControlCfgPath);
         }
           这样看没有任何问题,但是在运行的时候,输入新的速度,按方向键,方向键却按照原来的速度在走,不管输入多少,实际运动的速度就是不变,查看了ini文件,数值也保存了,把程序关了,再启动,轴就能按照这个保存的速度运动,但是在程序启动后再输入速度一点用都没有,只有再次启动的时候才是这个速度,请问我这问题出在哪里???
先作个揖~