protected void Button2_Click(object sender, EventArgs e)
{
TestClick tc = Button3_Click;
tc(sender, e);
}
public delegate void TestClick(object sender, EventArgs e);protected void Button3_Click(object sender, EventArgs e)
{
Response.Write("button3 clicked");
}如上代码!我可以用委托来实现,点击BTN2时执行BTN3的事件.现在的问题是:假设有N个按钮点击事件.如果我现在点击BTN2时不确定要执行哪个按钮的事件(要通过程序自己判断,请问如何实现?也就是说:TestClick tc ;
if (a==1)
tc= ??????(Button3_Click);
if (a=2)
tc= ??????(Button4_Click);
tc(sender, e);这里的Button3_click 是Void类型,要定义什么类型的变量来对取得这个值.(我看控件的事件属性里比如ONCLICK事件,可以选择哪个事件.但是当我这样做时却不行:
EventHandle aa=Button3_click;
tc=aa;
或
EventArags aa= Button3_click;
tc=aa;
---------------------------------------
求教高手,分不够再加!
Button3_Click、Button4_Click不是预先定义的么,如果是代码编写的时候就已经确定内容的函数,Button2 Click的时候根本不需要用什么委托。这样写就可以了。
if (a==1)
Button3_Click(sender,e);
if (a=2)
Button4_Click(sender,e);
public event TestClick tc;if (a==1)
this.tc += new TestClick(Button3_click);
if (a=2)
this.tc += new TestClick(Button4_click);这样可以吗?
if (a==1)
tc(Button3_Click);
if (a=2)
tc(Button4_Click);
Button3_Click(null,null);就行
{
... public event EventHandler BtnClick; private void btn_Click(object sender, eventArgs e)
{
if(BtnClick != null) BtnClick.Invork(sender, e);
}
}public class MyForm : Form
{
public MyForm()
{
myControl.BtnClick += new EventHandler(myControl_BtnClick);
}
private void myControl_BtnClick(object sender, eventArgs e)
{
...
}
}============
手写的代码,不知道有没有错误,大概意思是这样的了
{
if(BtnClick != null) BtnClick(sender, e);
}
你是想在点击btn2时动态触发某个方法,对不?可以动态托管某个事件,也可以动态加载某段文本来执行,如果是这样的,我可以把我的例子源代码发给你了。
xiyun兄演示只是如何建立事件并使用,应该不是楼主想要的。
{
bool result = true;
try
{
//事件
Type objType = Type.GetType("WindowsApplication2.Form2");
EventInfo eventname = null;
eventname = controlName.GetType().GetEvent(EventName);
Type objEventHandlerType = eventname.EventHandlerType;
//方法
BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static;
MethodInfo miHandler = objType.GetMethod(MethodName, flags);
if(checkBox1.Checked)
{
if (String.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("Please input code.");
textBox2.Focus();
return false;
}
if (null == GettedMethod)
{
GettedMethod = GetMethod(textBox2.Text);
}
else
{
if (IsChanged)
{
//删除
Delegate dEvent = Delegate.CreateDelegate(objEventHandlerType, null, GettedMethod);
eventname.RemoveEventHandler(controlName, dEvent);
GettedMethod = GetMethod(textBox2.Text);
}
}
miHandler = GettedMethod;
}
//创建委托
Delegate delegateEvent = Delegate.CreateDelegate(objEventHandlerType, null, miHandler);
//绑定
if (IsAddEvent)
eventname.AddEventHandler(controlName, delegateEvent);
else
eventname.RemoveEventHandler(controlName, delegateEvent);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
LastError = ex.Message;
GettedMethod = null;
result = false;
}
return result;
}
switch(a) {...}
}
顺便说一下:这是很基础的问题,熟练C#语法的都应该会,而不是所谓的“高手”专利!
用Sender不就可以判断出来了?
Button btn=new Button();
btn=(Button)Sender ...
根据btn.Id执行相应的方法
{
label.text="you click button1";
}
if(((Button)sender).text=="button2")
{
label.text="you click button2";
}
菜鸟怎么了?。。看看是给你面子。什么叫不要浪费时间。
我不知道你上面写了些什么东东
//看下面的话
如上代码!我可以用委托来实现,点击BTN2时执行BTN3的事件.现在的问题是:假设有N个按钮点击事件.如果我现在点击BTN2时不确定要执行哪个按钮的事件(要通过程序自己判断,请问如何实现?也就是说:
-----
如果是N个的话我建议用数组或泛型做,
动态邦定在一个事件上通过for或别的方法(自己写一个标示自己的东西,方法很多)
执行你想要到结果..
自己接来的自己想法.
不敢看完了怕浪费您的时间了
{
Isender = sender;
}protected void Button2_Click(object sender, EventArgs e)
{
if (Isender != null)
{
TestClick tc = new TestClick(Isender, e);
tc(sender, e);
}
}