也在挣扎基础知识中。不过Button的事件很多,可以右键属性,在那个"闪电"里面很多不一样的事件。
也可以自己写时间。
也可以自己写时间。
解决方案 »
- 接收文件后自动命名及保存到指定文件夹中的问题
- 求助关于json字符串解析的问题
- winform中如何使excel数据在datagridview中显示
- 求助: 一段文本的解析,Unicode, UTF8 or...?
- aspx中脚本文件访问不了asp中iframe对象?(急,救命呀!)
- 求助关于插入USB自动调出页面问题
- 一个串行通信类发布,欢迎大家下载试用!
- c#中怎样让窗体启动时自动判断在屏幕居中?
- 请问下ngen.exe怎么使用?我用了以后怎么从全局映像上看不到阿。
- 怎样将DG中数据的改变更新回数据库啊?
- request.ServicePoint.Expect100Continue什么意思
- WinForm窗体透明问题
http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx理解事件是怎么触发的,事件是调用对象内部触发的,如同函数调用一样。至于按钮事件,原理一样,但是牵涉到Windows消息处理机制,理解起来会比较困难。从简单的开始。P.S. 不要简单地认为委托是函数指针,这是一些早期从C++转向C#的程序员喜欢说的论调。委托和函数指针有相似的特性,但是完全是不同的概念。而且新手对C++的函数指针也不了解,不了解的去类比不了解的,反而会被误导。
this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);System.EventHandler这个就是API的一种委托类型,你再问它是啥,我还是告诉你这是一种API的委托类型,你要是再问第三次我就揍你一顿!这个么。咋说,就是个事件的生命,btn_confirm.Click是按钮的事件属性,+=是重载的运算符,new System.EventHandler(this.btn_confirm_Click);这里就是委托了,你看this.btn_confirm_Click这个是方法,方法作为参数,说白一点就是用户通知程序一个事情,程序去做一个事情!恩 就这么个意思 = =! 比如说,小明的妈妈告诉小明去打酱油,妈妈就是用户,告诉小明的内容就是消息,小明得到消息后可以判断是打酱油,打酱油方法里边有怎么打酱油的详细实现过程,比如先到商店,给钱,拿酱油,回家!也就等同于,Click是标定好的一种行为名称,相当于打酱油,这种行为的具体实现是用户自定义的,也就是btn_confirm_Click,也就是打酱油的具体方法,妈妈就是用户,小明就是这个btn_confirm按钮,用户点了按钮,就相当于妈妈告诉了小明打酱油!我不知道这么解释行不行啊反正我一路上都这么理解的!如果你要想给BUTTON重新定义一种事件委托,那你就继承BUTTON然后重写他,你想加啥就加啥,至于说怎么重写,你自己翻书去!或者给你段DEMO。
想明白啦!!!
this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);
btn_confirm.Click是控件的委托,就是windows监听到点击事件(这种api还有待研究咋搞出来的呢)的时候调用Click这个委托(因为当时定义控件的时候不知道用户写的函数名,所以就用相同类型的委托代替,用户添加函数后自动加到这个委托上面,正如cfvgodot所说,要隔一步!像接口的回调一样)
System.EventHandler 是this.btn_confirm.Click的类型,new实例化
谢谢~!@!!!!
public event EventHandler MyEvent;
事件要跟委托的类型,请问为嘛加事件这一层,api触发后直接调用委托不就行了吗?
很遗憾,你想不完全对。
btn_confirm.Click是使用EventHandler声明的一个事件,windows是消息驱动的,点击或按下后,会有消息发送到程序的消息队列,在消息循环中,调用按钮的OnClick方法,进而触发调用Click事件,事件由于你注册了,所以会调用你的事件响应函数,如果多次注册,会依次调用。如果是想了解事件,委托。建议你自己独立写个类,添加事件来学习,windows form已经多次封装。
类型安全的函数指针java里面用类封装这个方法,new ActionListener(){....}
c#用委托(其实原有的机制就可以完成这个事,不懂c#为什么又要搞套新的东西)
这个...不是消息触发->事件->委托->绑定的函数(btn_confirm_Click)这个顺序吗?怎么会先找按钮的OnClick方法呢,他当时不知道我onClick方法的名字吧,我如果换了名字?我的理解是他根据事件找到委托
然后根据委托上面绑定的函数执行用户所需的方法。
但是还有个委托,为什么引入事件呢?直接消息触发委托->用户的函数不就ok? 谢谢~
等于
//声明MyDelegate委托
System.EventHandler MyDelegate= new System.EventHandler(this.btn_confirm_Click);//将委托加到事件
this.btn_confirm.Click +=MyDelegate;
基本ok了 ,关于.Click的问题等研究下再看
我就不信ms把他都封装全了没有的咋办!
{
public delegate void NewDelegate();
public NewDelegate TestDelegate;//委托
public static event TestDelegate TestEvent;//事件 //比如你有一个按钮的CLICK响应时间,你就可以在这里调用
private void Button1_Click(object sender, EventArgs e)
{
TestDelegate();//执行委托
TestEvent();//执行事件
}
}
public Class Test2
{
Test test=new Test();
test.TestDelegate=this.DoSomeThing;
Test.TestEvent+= new Test.TestDelegate(DoSomeThing);
void DoSomeThing()
{
//you can do something here
}
}
CSDN-CSDN社区-.NET技术-C#管理菜单 结 帖 发 帖 回 复
我结贴了再开个新帖进来拿分。
好吧 。 层次很深啊 我看看
class test
{
static void Main()
{
picc d = a.test;
d();
d -= a.test;
if (d == null) {
Console.WriteLine("''");
} Console.Read();
}
}
class a
{
public static void test()
{
Console.WriteLine("成功了");
}
}
LZ 兄弟插一条哈
picc d = a.test;
这里和PICC d = new picc(a.test);
有什么区别
应该是picc d=a.test的时候clr很主动的帮你开辟d的空间
直接把test的地址给d了
哈哈~
应该是picc d=a.test的时候clr很主动的帮你开辟d的空间
直接把test的地址给d了
哈哈~
(就人而言则大多由于个人态度,或者各种标准(我们称之为科学知识的那些东西)),而决定动作,最后才是动作的执行(调用动作的Raise块)))。那个,扯远了,说回我们程序中的类对象:程序中的事件,大多,个人觉得是外部代码引起了对象内部的状态变化,偏出了预设的状态,Raise了事件(如果你想它Raise的话)}
执行动作(打酱油),