环境:
这是一个运动控制卡的运动控制程序,输入速度之后按方向键,能按照新的输入速度运动,速度控件为 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文件,数值也保存了,把程序关了,再启动,轴就能按照这个保存的速度运动,但是在程序启动后再输入速度一点用都没有,只有再次启动的时候才是这个速度,请问我这问题出在哪里???
先作个揖~
这是一个运动控制卡的运动控制程序,输入速度之后按方向键,能按照新的输入速度运动,速度控件为 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文件,数值也保存了,把程序关了,再启动,轴就能按照这个保存的速度运动,但是在程序启动后再输入速度一点用都没有,只有再次启动的时候才是这个速度,请问我这问题出在哪里???
先作个揖~
第二次并没有设置m_MotionEx的地方