0

想象一下这样的方法(在 Win Forms 中):

//First method
private void buttonStart_Click(object sender, EventArgs e)
{
       //I call another method here
       this.GetData(sender, null)
}

//Second method
private void GetData(object sender, EventArgs e)
{
       //how to check IF calling method is buttonStart_Click ???
       if(sender.Equals == buttonStart_Click) 
       {
            //DO BLAH BLAH
       }
}

我希望我很清楚,那就是我想知道哪个方法正在调用“GetData”。注意我知道我可以有一个全局变量并将其设置为某个值,但我想知道是否有直接的方法来做到这一点?

谢谢。

4

3 回答 3

1

sender不会buttonStart_Click,它只是按钮。所以你可以测试一下。

if (sender != null && sender.Equals(buttonStart))
{
   // work with this information
}

但是,如果您发现自己沿着这条路走下去,您最终可能会看到多个if块,每个块都有不同的行为,具体取决于sender. 如果是这种情况,您最好采用不同的方法。每个事件都有不同的处理程序,通过委托封装不同的逻辑等。不要以一个充满if / else if / else if / ....

于 2011-04-19T14:05:11.590 回答
0

如果您因为从其他方法调用该方法而不得不做一些不同的事情,那么最好只调用一个不同的方法:

//First method
private void buttonStart_Click(object sender, EventArgs e)
{
       //I call another method here
       this.SpecialGetData(sender, null)
}

//Second method
private void GetData(object sender, EventArgs e)
{
     // Do regular stuff
}

//Special second method
private void SpecialGetData(object sender, EventArgs e)
{
    //DO BLAH BLAH
}
于 2011-04-19T13:40:53.483 回答
0

不知道你为什么这样做,但如果你需要... http://www.csharp411.com/c-get-calling-method/

于 2011-04-19T13:46:20.133 回答