如何通过“发件人”对象检查“方法组”?

时间:2011-04-19 13:37:39

标签: c# winforms sender eventargs method-group

想象一下像这样的方法(在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'。 注意我知道我可以拥有一个全局变量并将其设置为某个东西,但我想知道是否有直接的方法来执行此操作?

感谢。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

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