日期:2014-05-18  浏览次数:21213 次

winform使用用户控件无法响应click事件
自己做了一个菜单,其中菜单项(menuItem)做成了一个用户控件,
但奇怪的是,点击第一级菜单的menuItem的时候,能够响应menuItem用户控件中的label绑定的
click事件,但是当第二级菜单显示出来,点击时候,却不能响应同一个click事件。
而无论是几级菜单,菜单项用户控件中的label的 mouseEnter和mouseLeave事件都能响应。
真是个奇怪的问题。
注,一级菜单和二级菜单的不同就是他们分别被add在不同的panel中。

代码如下:

//在菜单中加载菜单项(menuItemM自定义控件),无论一级二级都是通过该函数添加菜单项的。
 public void addItem(string title, bool haveSubMenu, string url,string id,int index1)
  {  
  menuItemM mi = new menuItemM();
  mi.setData(title, url, id, haveSubMenu, this.mf,this.menuLeft,this.menuTop+this.menuHeight,this.level,index1);
  mi.Left = 0;
  mi.Top = this.menuHeight - 2;
  this.pnMenuItem.Controls.Add(mi);
  menuHeight += 29;
  this.Height =menuHeight;
  this.ResumeLayout(false); 
  }

//最后把pnMenuItem(包含该级菜单的所有菜单项的panel) 加载到不同的panel,1级的加载到 menuPanel中,2级加载到 menuPanel2中。是不是因为这个原因才
导致点击菜单项用户控件 (menuItemM)中的 label 有时无法响应 click事件。

if(level==1)
menuPanell.Controls.Add(pnMenuItem);
else
menuPanel2.Controls.Add(pnMenuItem);



//lbTitle是 menuItemM自定义控件中的一个 Label.在一级菜单中能运行该函数,但是在二级菜单中却不能运行。
  private void lbTitle_Click(object sender, EventArgs e)  
  {
  MessageBox.Show("click");
   
  }





------解决方案--------------------
不可能没有响应,一定是你重新捕捉了系统消息,你看看是否重写了WndProc函数