You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义组件文本框无法正确设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:10:48