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

WinForm调用方法获取局部变量返回值异常问题排查

问题根因

核心错误出在操作符判断逻辑的取值方式错误:
if (sender.ToString() == "+") 这行判断永远不会成立。sender是触发点击事件的Button控件对象,调用ToString()默认返回的是控件类型字符串(格式类似System.Windows.Forms.Button, Text: +),而非按钮上显示的文本,因此toCall始终为空字符串,MathCalc方法里的加法分支永远不会执行,直接返回初始化的0.0m。

修复方案

直接修改判断逻辑,正确取按钮的Text属性做匹配即可,修改后代码如下:

public void PassControlDataOnClick(object sender, EventArgs e)
{
    string toCall = "";
    string szLeft = box_L_Input.Text;
    string szRight = box_R_Input.Text;

    // 提前将sender强转为Control,避免重复转换
    Control triggerBtn = (Control)sender;

    decimal dLeft = Convert.ToDecimal(szLeft);
    decimal dRight = Convert.ToDecimal(szRight);

    // 修正:取按钮的Text属性做匹配
    if (triggerBtn.Text == "+")
    {
        toCall = "ADD";
    }
    
    decimal dAnswer = MathCalc(dLeft, dRight, toCall);
    
    string szAnswer = dAnswer.ToString();
    string szEquation = $"{szLeft} {triggerBtn.Text} {szRight} = {szAnswer}";
    lbl_Output.Text = szEquation;
}

public decimal MathCalc(decimal dL, decimal dR, string toCall)
{
    decimal dA = 0.0m;
    if (toCall == "ADD")
    {
        dA = dL + dR;
    }
    return dA;
}
额外优化建议
  • 可以提前给每个运算按钮的Tag属性赋值为ADD/SUB/MUL/DIV这类操作标识,判断时直接取triggerBtn.Tag.ToString()做匹配,避免后续按钮文本修改时逻辑失效
  • 输入文本框要加合法性校验,避免用户输入非数字内容时Convert.ToDecimal抛出异常

内容的提问来源于stack exchange,提问作者KyleC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:48:03