从另一种方法访问变量

时间:2019-03-09 18:28:10

标签: c#

我知道之前已经有人问过这个问题,但是我仍然无法弄清楚,这些答案也无济于事。我需要知道如何正确执行下面的代码,但成功完成。

public void ProgressBar_MouseDown(object sender, EventArgs e)
{
     int somevariable;
}

public void ProgressBar_MouseUp(object sender, EventArgs e)
{
     int anothervariable = somevariable;
}

3 个答案:

答案 0 :(得分:3)

private int _somevariable;
public void ProgressBar_MouseDown(object sender, EventArgs e)
    {
         //changing _somevarible
    }

public void ProgressBar_MouseUp(object sender, EventArgs e)
    {
         int anothervariable = _somevariable;
    }

局部变量仅在方法执行期间存在。

答案 1 :(得分:1)

采用您的方法,

public void ProgressBar_MouseDown(object sender, EventArgs e)
{
     int somevariable;
}

将该方法想象成一个带有输入和输出的黑盒子-您可以放入数据和接收数据,但是您不知道盒子内部发生了什么。

因此,当您在方法中创建int someVariable时,代码中的其他内容都无法“看到”此结果。

要解决此问题,应在类中使用变量,如下所示:

public class Program
{
    private int somevariable;

    public void ProgressBar_MouseDown(object sender, EventArgs e)
    {
        // Operate on somevariable
    }

    public void ProgressBar_MouseUp(object sender, EventArgs e)
    {
        int anothervariable = somevariable;
    }
}

如果我们回到黑匣子的类比,现在想象一下它有一个窥视孔,只能向外看。因此,您的方法(黑盒)可以查看类并“查看” int somevariable,但是其他对象仍然无法查看方法内部。

您也可以在方法之间传递somevariable,但是从外观上看,您正在响应UI事件,因此不容易做到这一点。

答案 2 :(得分:0)

因此,您有2个不同的事件,分别从2个不同的操作调用。因此,基本的答案是您不能将一个动作的值直接传递给另一个动作。为此,您需要将“ _somevariable”声明为全局变量,但是在C#中我们没有这样做,因此,下一个最佳解决方案是使用静态类和静态变量。

操作1:鼠标按下呼叫的ProgressBar_MouseDown

操作2:鼠标向上调用的ProgressBar_MouseUp

public static class GlobalVariables
{
    public static int somevariable { get; set; }
}

public void ProgressBar_MouseDown(object sender, EventArgs e)
{
    //changing _somevarible
    //somevarible=set your value here
}

public void ProgressBar_MouseUp(object sender, EventArgs e)
{
    //int anothervariable = somevariable;
    //here you should be able to access the somevariable
}