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文件,数值也保存了,把程序关了,再启动,轴就能按照这个保存的速度运动,但是在程序启动后再输入速度一点用都没有,只有再次启动的时候才是这个速度,请问我这问题出在哪里???
先作个揖~
...全文
529 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
第一次发帖,还有各路英雄豪杰多多支持
内容概要:本文介绍了软件定义汽车(SDV)的最佳实践案例,重点围绕基于Vector技术的电子电气(E/E)架构设计与实现。文档展示了高算力计算平台(HPC)、区域控制器(Zone ECU)和车载网络(如CAN、Ethernet)的系统架构布局,并结合AUTOSAR操作系统(Classic/Adaptive)、虚拟化(Hypervisor)和SOA服务设计,构建现代化车载系统。通过vCANdrive平台演示了从开发、测试(SIL/HIL)、到OTA升级的全流程,涵盖传感器、执行器、应用层软件及云端协同的集方案。同时展示了硬件原型(如树莓派、Triboard)和MICROSAR系列工具链在实际项目中的应用。; 适合人群:从事汽车电子系统开发、车载软件架构设计以及智能网联汽车研发的工程师和技术管理人员,具备一定的嵌入式系统或AUTOSAR基础者更佳。; 使用场景及目标:①理解软件定义汽车的整体架构设计方法;②掌握基于Vector工具链的HPC与区域控制器集方案;③实现OTA更新、SIL/HIL测试、ETH-CAN通信转换等关键技术验证;④支持智能驾驶(ADAS)与智能座舱(IVI)系统的快速原型开发。; 阅读建议:建议结合Vector相关工具(如PREEvision、CANoe4SW、MICROSAR)进行实践操作,重点关注系统分层设计、通信机制与软件更新流程,同时可参考文档中的硬件连接示意图与信号映射关系进行仿真与实车验证。

111,112

社区成员

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

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

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