skyzoneskyzone 发布留言 2008-10-14 14:44
【交流探讨】说说你本人对“事件”的理解……
一种好像是这样 protected override void WndProc(ref Message m) { } 另一种是: *** +=new eventhander(); 没明白这个过程究竟是怎么样的。 以前学的别的编程语言都是要么只是针对本窗体内的控件的事件的控制, 对窗体外的事件的控制怎么控制,原理??(如果这个程序是在虚拟机里运行,在windows下的事件又会不会受到影响)[/quote] ===========================================很喜欢本论坛里的引用,哈哈,拿来用用============================================================
08.10.16 从网上查的一些事件的基础概念(不懂,怕找的源代码会误导同志们,先上基础概念)。
C#的事件机制是基于委托实现的。实现一个事件,要先定义一个委托类型
class1
{
public delegate void mydelegate (myEventArgs e);
public event mydelegate event1;
}
然后我们可以使用+=和-=注册、移除事件
class1.event1 += new mydelegate(new myEventArgs()); ========================================================================================= 所有形如: void 函娄名(object 参数名,EventArgs 参数名);的函数都可以作为Control类的Click事件响应方法。 EventArgs是包含事件数据的类的基类,用于传递事件的细节, 参数object sender表示引发事件的对象,(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1)。
========================================================================================= 怎么把这个方法和事件联系起来呢,请看下面的代码。 this.button1.Click += new System.EventHandler(this.button1_Click); (其实button1.Click 为System.EventHandler委派的实例事件。与委派中委派实例委托给某一方法非常相似) 把this.button1_Click方法绑定到this.button1.Click事件。 =========================================================================================[/quote] [quote] wndproc的用法(自我感觉:像是提供了一个windowsprogram即windows程序的过滤功能,符合条件的进行处理,不符合的不进行处理) using System; using System.Windows.Forms; namespace AtTongxilai { /// /// 只能输入数字的文本框 /// public class NumTextBox : TextBox { public NumTextBox() { // // TODO: 在此处添加构造函数逻辑 // }
protected override void WndProc(ref System.Windows.Forms.Message m) { int WM_CHAR = 0x0102; if(m.Msg == WM_CHAR) { if(((char)m.WParam >= '0') && ((char)m.WParam <= '9') || (int)m.WParam == (int)Keys.Back || (int)m.WParam == (int)Keys.Delete) { base.WndProc (ref m); } } else { base.WndProc (ref m); } } } }
|
[quote] 使用+=和-=注册、移除事件,只注册不移除的话网页加载完成显示两次(有时候三次,不正常)移除后正常) 以下部分是自己做的源代码在测试。所以。。。。如果有可看度,最好能给加个精什么之类的 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics;
namespace WindowsApplication12 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate("http://www.baidu.com"); webBrowser1.DocumentCompleted+=new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); webBrowser1.DocumentCompleted -=new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); } public void sst() { MessageBox.Show("哈哈"); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { MessageBox.Show("加载完成任务"); sst(); }
private void Form1_Load(object sender, EventArgs e) { } } }
|
小仙 发布留言 2008-10-14 15:06
国际惯例,本帖置顶,受万人景仰。
大家积极讨论哈,新的探讨话题。
[ 本帖最后由 小仙 于 2008-10-14 15:11 编辑 [/it]]
skyzoneskyzone 发布留言 2008-10-14 15:54
期待高论。
duanchangren 发布留言 2008-10-14 23:17
要理解么,死的拿来就用
小仙 发布留言 2008-10-15 19:55
发帖的兄弟,最好帖上段代码还有描述,便于理解,我最近想搞个自定义事件和调用事件的专栏,如果在自己能力所及的范围内弄的出来的话。
Wadialin 发布留言 2008-10-16 09:31
这个问题值得讨论,但是人气怎么那么差???
小仙 发布留言 2008-10-16 14:03
呵呵,大家不要害羞,尽情的发表,理是越辩的越明,哪怕一个人来一句话,也很值得参考啊。
静夜思 发布留言 2008-10-16 16:25
为了激发大家的讨论热情,改了一下标题,原先的标题会让人误以为是求助帖
myemail1983 发布留言 2008-10-16 22:20
我觉得大部分人水平停留在界面代码部分,没有考虑太多,多了也不懂。。。
期待与大家共同进步
页: [1]