首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问,怎么知道一个函数是具体由哪个上次函数调用,或者一个事件具体由哪个控件触发

2012-01-03 
请教,如何知道一个函数是具体由哪个上次函数调用,或者一个事件具体由哪个控件触发?比如我有两个区域A,B,我

请教,如何知道一个函数是具体由哪个上次函数调用,或者一个事件具体由哪个控件触发?
比如我有两个区域A,B,   我在A中点击鼠标左键,和在B中点击鼠标左键都触发同一事件Click(object   sender,   EventArgs   e),   但是我想在这个事件中,知道具体是由A还是B引起的,就像VS调试中的Call   Back栏那样,能知道上层调用,请问有什么办法知道这个信息吗?
只能这样,如果A是AClick(),   B是BClick(),那不在讨论范围内,请指教,thanks!

[解决办法]
事件里不是有个object 类型的 sender吗。。。
[解决办法]
有参数的话可以以参数类型识别
[解决办法]
ButtonA和ButtonB共用一个Click事件

在事件中
if (sender is ButtonA)
else if (sender is ButtonB)
[解决办法]
可以使用StackTrace来实现,比如:

private void button1_Click(object sender, EventArgs e)
{
StackTrace st = new StackTrace(true);
StackFrame Called = st.GetFrame(1);
System.Console.WriteLine(Called.GetMethod().Name);
}
[解决办法]
又如:
private void button1_Click(object sender, EventArgs e)
{
someMethod();
}

private void someMethod()
{
StackTrace st = new StackTrace(true);
StackFrame Called = st.GetFrame(1);
System.Console.WriteLine(Called.GetMethod().Name);
}

//输出结果为:
button1_Click

[解决办法]

.net 中事件委托原型,具有约定成俗的规范:处理程序的第一个参数表示触发此事件的对象

as,

void Button1_Click(object sender, EventArgs e) {
Button btn = sender as Button;
if(btn != null) {
Console.Write(btn.Text);
}
}
[解决办法]
好好研究一下.net的事件机制吧
object sender是事件源
EventArgs e是传递的信息

[解决办法]
一般根据sender和e都能判断

热点排行