自定义组件文本框无法正确设置float类型变量问题求助
问题:Float变量无法同步自定义组件文本框的用户输入值
自定义组件文本框初始值设为300.00,修改为100.00后点击按钮,期望返回100.00但实际得到0.00。核心问题是t1、t2、t3、t4始终为0,未正确获取用户输入的数值。
相关代码
变量声明
float t1, t2, t3, t4;
构造函数
public SetVar(float x1, float x2, float x3, float x4) { InitializeComponent(); row_var1.Value1 = x1; row_var1.Value2 = x2; row_var2.Value1 = x3; row_var2.Value2 = x4; }
属性定义
public float T1 { get { return t1; } set { t1 = value; } } // T2、T3、T4属性定义与T1类似
setValues方法
public void setValues() { this.row_var1.Value1 = T1; this.row_var1.Value2 = T2; this.row_var2.Value1 = T3; this.row_var2.Value2 = T4; }
按钮点击事件
private void button1_Click(object sender, EventArgs e) { this.setValues(); var frm = Application.OpenForms.OfType<Main>().FirstOrDefault(); if (frm != null) { frm = new Main(this.row_var1.Value1, this.row_var1.Value2, this.row_var2.Value1, this.row_var2.Value2); frm.Activate(); } Close(); }
精准解决方案
1. 修正setValues方法的赋值方向
原方法逻辑完全反向,是把变量值赋给控件,实际需要从控件读取用户输入,同步到t1等变量:
public void setValues() { // 直接给变量赋值 t1 = this.row_var1.Value1; t2 = this.row_var1.Value2; t3 = this.row_var2.Value1; t4 = this.row_var2.Value2; // 或者通过属性赋值(效果一致) // T1 = this.row_var1.Value1; // T2 = this.row_var1.Value2; // T3 = this.row_var2.Value1; // T4 = this.row_var2.Value2; }
2. 完善构造函数的初始化逻辑
原构造函数只给控件赋值,未初始化t1等变量,导致初始状态变量值为0。需要同时给变量和控件赋值:
public SetVar(float x1, float x2, float x3, float x4) { InitializeComponent(); // 先初始化变量 t1 = x1; t2 = x2; t3 = x3; t4 = x4; // 再给控件赋值 row_var1.Value1 = x1; row_var1.Value2 = x2; row_var2.Value1 = x3; row_var2.Value2 = x4; }
3. 修正按钮事件的窗体更新逻辑
原事件重新创建Main窗体,无法更新已有窗体的数值。直接调用已有窗体的更新方法(假设Main窗体有UpdateValues方法):
private void button1_Click(object sender, EventArgs e) { this.setValues(); var frm = Application.OpenForms.OfType<Main>().FirstOrDefault(); if (frm != null) { // 调用Main窗体的方法更新数值 frm.UpdateValues(T1, T2, T3, T4); frm.Activate(); } Close(); }
如果Main窗体没有专门的更新方法,也可以直接修改对应变量,但推荐用方法封装逻辑,保持代码可维护性。
内容的提问来源于stack exchange,提问作者Francisco J A
相关产品推荐
相关产品推荐

