首页 > 解决方案 > 获取局部变量返回到 WinForm 中的另一个方法

问题描述

所以我在一个学校实验室工作,我在一些应该是相当基本的东西上玩得很开心。我有一系列按钮和 2 个文本框。我有一种方法,所有按钮都通过并传递给一个新方法来确定所需的指令。

它从新方法计算并返回值。

代码如下所示,仅在另一种方法中使用 1 个按钮及其关联的 if 语句。

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

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

        if (sender.ToString() == "+")
        {
            toCall = "ADD";
        }
       
        decimal dAnswer = MathCalc(dLeft, dRight, toCall);
        
        string szAnswer = dAnswer.ToString();
        string szEquation = $"{szLeft}{" "}{((Control)sender).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;
    }

每次我运行这个,我得到的输出是从十进制 dA = 0.0m; 我需要它作为返回值,但对于我的生活,我无法弄清楚我哪里出错了。

标签: c#winforms

解决方案


如果您在调试器中单步执行此代码,您将看到该if (sender.ToString() == "+")行已被单步执行。

此外,您可以sender.ToString()在调试器的即时窗口中运行并查看它是否返回System.Windows.Forms.Button, Text: +(假设您的发件人是带有 text 的普通按钮+

换句话说,这个 if 检查没有希望做你想做的事。由于您知道这sender将是一个按钮,您可以将其转换为一个 Button 类并获取Text值以查看它是否确实是+按钮:

            if (((Button)sender).Text == "+")
            {
                toCall = "ADD";
            }

推荐阅读