自定义的控件,如何添加事件啊 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先定义一个委托public delegate void itemClikedDelegate(int a,int b); 再定义相应的事件public event itemClikedDelegate itemCliked; 在需要的地方激发出事件private void AAAA(object sender, MouseEventArgs e){itemCliked(bandList.CurrentBand,j); //在此触发事件,并传入需要的参数}在使用到控件的地方编写事件处理程序。就像编写Button的Click事件一样。private void myControl_itemCliked(int a, int b){ MessageBox.Show("参数a为:"+a+"参数b为:"+b);} 首先定义一个委托 public delegate void itemClikedDelegate(int a,int b); 再定义相应的事件 public event itemClikedDelegate itemCliked;我认为这两步就已经定义好事件了! 正解,不过itemCliked(bandList.CurrentBand,j); 这个里的参数为什么这么写呢?呵呵 事件类型能用 .net 类库有的就用已有的, 比如简单的 EventHandler事件参数尽量从 EveentArgs 体系派生如果事件多, 利用 Control基类的.Events属性 来收集代理实现事件激发哪里判断跨线程调用, 显得周全.事件激发采用 protected virtual void OnSomeEventOccured(EventArgs e); 风格比较好. 高手即是高手!事件参数从EventArgs继承,然后添加需要的属性,构造函数,public class tempArgs:EventArgs{ string name; public tempArgs(string name){this.name=name;}public Name{ get{return name;}}}然后声明事件:public event EventHandler<tempArgs> TempEvent;将事件调用封居一个函数:protected virtual void OnTempEvent(tempArgs e){ if(TempEvent!=null){ TempEvent(this,e);}}最好在需要的地方调用:public void Loading Data(){... tempArgs e=new tempArgs("加载数据"); OnTempEvent(e);...}这样一切ok.......(当然你还需要订阅此事件:xxx.TempEvent+=(然后连按两下Tab键,就行了));;; 通过这种方法定义你的UserControl,你会发现它多了一个自定义事件,然后你给那个自定义事件button1Click添加方法即可实现你的效果。 C# code public event EventHandler button1Click; public UserControl1() { InitializeComponent(); button1.Click += new EventHandler(button1_Click); } void button1_Click(object sender, EventArgs e) { if (button1Click != null) { button1Click(this, e); } }试试 给button1添加不同事件:button1.Click += new EventHandler(button1_Click);button1.MouseDown += new MouseEventHandler(button1_MouseDown);button1.Paint += new PaintEventHandler(button1_Paint);形式相同,参数不同private void button1_Click(object sender, EventArgs e){ }private void button1_Paint(object sender, PaintEventArgs e){ }private void button1_MouseDown(object sender, MouseEventArgs e){ } 委托实现 用户控件中定义 public event EventHandler BtnEvent; private void Btn_Click(object sender, System.EventArgs e) { if (BtnEvent != null) { BtnEvent(sender,e); } } override protected void OnInit(EventArgs e) { btn.BtnEvent += new EventHander(this.test); } private void A(object sender ,System.EventArgs e) { } C# DataGridView删除行问题 Windows窗体应用程序问题? 对c#中枚举的一些总结 反DLL用什么?送分 取小数后二位 datagrid控件如何手动添加列? 存储过程问题 如何封装源文件 C# 用Process.Start()会出现打开的程序无法访问网络 我很想知道一件事 正则表达式问题 求救了。。。。。。 如何在隐藏层内实现无刷新
public delegate void itemClikedDelegate(int a,int b);
再定义相应的事件
public event itemClikedDelegate itemCliked;
在需要的地方激发出事件
private void AAAA(object sender, MouseEventArgs e)
{
itemCliked(bandList.CurrentBand,j); //在此触发事件,并传入需要的参数
}
在使用到控件的地方编写事件处理程序。就像编写Button的Click事件一样。private void myControl_itemCliked(int a, int b)
{
MessageBox.Show("参数a为:"+a+"参数b为:"+b);
}
public delegate void itemClikedDelegate(int a,int b);
再定义相应的事件
public event itemClikedDelegate itemCliked;我认为这两步就已经定义好事件了!
正解,不过itemCliked(bandList.CurrentBand,j); 这个里的参数为什么这么写呢?
呵呵
高手即是高手!事件参数从EventArgs继承,然后添加需要的属性,构造函数,
public class tempArgs:EventArgs
{
string name;
public tempArgs(string name){this.name=name;}
public Name
{
get{return name;}
}
}
然后声明事件:public event EventHandler<tempArgs> TempEvent;
将事件调用封居一个函数:protected virtual void OnTempEvent(tempArgs e)
{
if(TempEvent!=null)
{
TempEvent(this,e);
}
}最好在需要的地方调用:public void Loading Data()
{
...
tempArgs e=new tempArgs("加载数据");
OnTempEvent(e);
...
}这样一切ok.......(当然你还需要订阅此事件:xxx.TempEvent+=(然后连按两下Tab键,就行了));;;
C# code public event EventHandler button1Click;
public UserControl1()
{
InitializeComponent();
button1.Click += new EventHandler(button1_Click);
} void button1_Click(object sender, EventArgs e)
{
if (button1Click != null)
{
button1Click(this, e);
}
}
试试
button1.MouseDown += new MouseEventHandler(button1_MouseDown);
button1.Paint += new PaintEventHandler(button1_Paint);形式相同,参数不同
private void button1_Click(object sender, EventArgs e)
{ }
private void button1_Paint(object sender, PaintEventArgs e)
{ }
private void button1_MouseDown(object sender, MouseEventArgs e)
{ }
用户控件中定义
public event EventHandler BtnEvent;
private void Btn_Click(object sender, System.EventArgs e)
{
if (BtnEvent != null)
{
BtnEvent(sender,e);
}
}
override protected void OnInit(EventArgs e)
{
btn.BtnEvent += new EventHander(this.test);
}
private void A(object sender ,System.EventArgs e)
{
}