C#控件里有一段代码,封装成方法之后再调用为什么就不好使了呢??

laizixingxing567 2018-09-15 07:58:35
环境:
这是一个运动控制卡的运动控制程序,输入速度之后按方向键,能按照新的输入速度运动,速度控件为 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文件,数值也保存了,把程序关了,再启动,轴就能按照这个保存的速度运动,但是在程序启动后再输入速度一点用都没有,只有再次启动的时候才是这个速度,请问我这问题出在哪里???
先作个揖~
...全文
509 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏克贝塔03 2018-09-17
  • 打赏
  • 举报
回复
m_Global.m_MotionEx.m_dSpeed_X = Convert.ToDouble(tbSpeedX.Text);
第二次并没有设置m_MotionEx的地方
老夏 2018-09-16
  • 打赏
  • 举报
回复
第二个参数传值并不会修改 m_Global.m_MotionEx.m_dSpeed_X ,需要改成 ref double
laizixingxing567 2018-09-15
  • 打赏
  • 举报
回复
我已经查出问题出在哪了,在这里卖个关,看看有人能看出问题出在哪吗
laizixingxing567 2018-09-15
  • 打赏
  • 举报
回复
第一次发帖,还有各路英雄豪杰多多支持

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧