请教,如何知道一个函数是具体由哪个上次函数调用,或者一个事件具体由哪个控件触发?

huheng_0_0 2007-07-12 04:32:06
比如我有两个区域A,B, 我在A中点击鼠标左键,和在B中点击鼠标左键都触发同一事件Click(object sender, EventArgs e), 但是我想在这个事件中,知道具体是由A还是B引起的,就像VS调试中的Call Back栏那样,能知道上层调用,请问有什么办法知道这个信息吗?
只能这样,如果A是AClick(), B是BClick(),那不在讨论范围内,请指教,thanks!
...全文
187 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
amandag 2007-07-12
  • 打赏
  • 举报
回复
一般根据sender和e都能判断
Visual00000000 2007-07-12
  • 打赏
  • 举报
回复
好好研究一下.net的事件机制吧
object sender是事件源
EventArgs e是传递的信息
Jinglecat 2007-07-12
  • 打赏
  • 举报
回复

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

as,

void Button1_Click(object sender, EventArgs e) {
Button btn = sender as Button;
if(btn != null) {
Console.Write(btn.Text);
}
}
huheng_0_0 2007-07-12
  • 打赏
  • 举报
回复
又见老大, hbxtlhx(平民百姓-自已动手,丰衣足食) !!!!
好的,我慢慢研究一下各位的方案,明天结贴,thanks again.
北京的雾霾天 2007-07-12
  • 打赏
  • 举报
回复
又如:
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
北京的雾霾天 2007-07-12
  • 打赏
  • 举报
回复
可以使用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);
}
lovefootball 2007-07-12
  • 打赏
  • 举报
回复
ButtonA和ButtonB共用一个Click事件

在事件中
if (sender is ButtonA)
else if (sender is ButtonB)
qery 2007-07-12
  • 打赏
  • 举报
回复
有参数的话可以以参数类型识别
zh-wall-e 2007-07-12
  • 打赏
  • 举报
回复
事件里不是有个object 类型的 sender吗。。。
huheng_0_0 2007-07-12
  • 打赏
  • 举报
回复
自己顶一下~~ :)

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧