我定义了三个button,事件就是Click
private void btn_1_Click(object sender, EventArgs e) { MessageBox.Show("Button1"); }
private void btn_2_Click(object sender, EventArgs e) { MessageBox.Show("Button2"); }
private void btn_3_Click(object sender, EventArgs e) { MessageBox.Show("Button3"); }定义一个新Button,btn_all
btn_All.Click += btn_1_Click;
btn_All.Click += btn_2_Click;
btn_All.Click += btn_3_Click;
但执行时点一下btn_all没反应,点第二下才执行委托链的函数,显示123.
然后我定义一个EventArgs 类型的委托eh
EventHandler eh = new EventHandler(btn_1_Click);
eh += new EventHandler(btn_2_Click);
eh += new EventHandler(btn_3_Click);
eh(sender, e);
这样执行点一次就行了。
我想知道Click事件的执行代码在哪,有没有类似 eh(sender, e);事件执行代码?
为什么上面的点两次才执行,下面点一次就治行了?
private void btn_1_Click(object sender, EventArgs e) { MessageBox.Show("Button1"); }
private void btn_2_Click(object sender, EventArgs e) { MessageBox.Show("Button2"); }
private void btn_3_Click(object sender, EventArgs e) { MessageBox.Show("Button3"); }定义一个新Button,btn_all
btn_All.Click += btn_1_Click;
btn_All.Click += btn_2_Click;
btn_All.Click += btn_3_Click;
但执行时点一下btn_all没反应,点第二下才执行委托链的函数,显示123.
然后我定义一个EventArgs 类型的委托eh
EventHandler eh = new EventHandler(btn_1_Click);
eh += new EventHandler(btn_2_Click);
eh += new EventHandler(btn_3_Click);
eh(sender, e);
这样执行点一次就行了。
我想知道Click事件的执行代码在哪,有没有类似 eh(sender, e);事件执行代码?
为什么上面的点两次才执行,下面点一次就治行了?
解决方案 »
- 怎样转换textbox数值类型?
- 正则表达式的重复捕获问题
- C#如何做成setup文件
- C#windows服务捕获全局异常
- c#用户权限分配问题
- C#.NET 上传图片时怎样限制文件格式?
- Duwamish的说明和 增加Common项目作为Solution的公共模块的方法。怎么在一个项目中生成立一个项目中类的实例
- 还是关于C# Windows Form的框架及MDI的问题
- 本人一直以为.net只提供面向web应用的跨平台能力,而对于..................
- 我把c:\inetpub\wwwroot\webapplication1给误删了,该怎么办?????????
- SqlDataAdapter.update 大小写问题
- C# WINFROM开发,问个新手问题
btn_All.Click += btn_2_Click;
btn_All.Click += btn_3_Click;
你这个写在哪里?是不是写在按钮事件里,第一次点得时候没有注册事件,所以点第二次才会有
btn_All.Click += new EventHandler(btn_1_Click);
private void btn_1_Click(object sender, EventArgs e) { MessageBox.Show("Button1"); }
private void btn_2_Click(object sender, EventArgs e) { MessageBox.Show("Button2"); }
private void btn_3_Click(object sender, EventArgs e) { MessageBox.Show("Button3"); }定义一个新Button,btn_all
btn_All.Click += btn_1_Click;
btn_All.Click += btn_2_Click;
btn_All.Click += btn_3_Click;
这个对吗?可以这样用吗,你用一个事件=一个方法返回..
是不是应该用
new EventHandler(btn_1_Click);一下呢.
btn_All.Click += btn_2_Click;
btn_All.Click += btn_3_Click;
这段是写在哪的?
要是写构造里应该不会有问题
委托名 委托实例=方法名,
不需要委托名 委托实例=new 委托名(方法名)
你的方法为本了委托的意义
你可以写一写自定义事件。 比较好写的是ValueChanged事件。定义一个委托,在set方法里加入事件。就可以了。
不过类似于Click这种事件是系统从监听程序拿到的。
13楼真牛人也!
{
//private bool BBB;
Tokens t;
public Form1()
{ InitializeComponent();
t = new Tokens();
t.DDDValueChanged += new Tokens.DDDChanged(DDDChanged);
}
//Regex rx = new Regex(@"^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$");
//Regex rx1 = null; private void button1_Click(object sender, EventArgs e)
{
t.DDD = "AA";
t.DDD = "BB";
}
private void DDDChanged(object sender,string value)
{
MessageBox.Show(sender.ToString() + " " + value);
MessageBox.Show("事件触发了");
} } public class Tokens
{
public delegate void DDDChanged(object sender, string value);
public event DDDChanged DDDValueChanged;
private string elements;
public string DDD
{
get { return elements; }
set { elements = value;
DDDValueChanged.Invoke(this, value);
}
}
}刚写的一个自定义事件。
这东西真挺不好懂的。不过也不经常用。