我知道之前已经有人问过这个问题,但是我仍然无法弄清楚,这些答案也无济于事。我需要知道如何正确执行下面的代码,但成功完成。
public void ProgressBar_MouseDown(object sender, EventArgs e)
{
int somevariable;
}
public void ProgressBar_MouseUp(object sender, EventArgs e)
{
int anothervariable = somevariable;
}
答案 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
}