CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何給動態生成的菜單加click事件呢?

楼主NiuNiuTZ(风满袖)2003-07-03 09:47:45 在 .NET技术 / C# 提问

我是根據用戶的對模塊的權限動態生成的菜單,代碼如下:  
  ///   <summary>  
  ///   動態生成某部門中某用戶的菜單  
  ///   </summary>  
  ///   <param   name="Bmbh">部門編號</param>  
  ///   <param   name="userName">用戶名</param>  
  ///   <param   name="Mkmc">模塊名稱</param>  
  ///   <param   name="m0">菜單項</param>  
  ///   <param   name="iniMkbm">模塊編碼</param>  
  ///   <param   name="Sfzjd">是否終節點</param>  
  private   void   GenMenu(string   Bmbh,string   userName,string   Mkmc,MenuItem   m0,int   iniMkbm,bool   Sfzjd)  
  {  
  //Define   a   new   MenuItem  
  MenuItem   m=new   MenuItem();  
  m.Text=Mkmc;  
  if   (iniMkbm.ToString().Length==4)  
  {  
  mainMenu1.MenuItems.Add(m);  
   
  }  
  else  
  {  
  m0.MenuItems.Add(m);  
  m0.Index=iniMkbm;  
  }  
   
   
  string   mySql="SELECT   y.mkbm,y.mkmc,y.sjmkbm,y.sfzjd   FROM   "+  
  "(select   a.js,b.mkbm   from   b_czryjs   a   left   join   b_qxqd   b   on   a.js=b.js   "+  
  "where   a.yhm='"+userName+"'   and   a.bmbh='"+Bmbh+"')x,b_mkqd   y   "+  
  "where   x.mkbm=y.mkbm   and   y.sjmkbm="+iniMkbm+"   order   by   y.mkbm";  
  SqlDataReader   myDataReader=SelectData(mySql);  
  while   (myDataReader.Read())  
  {  
  GenMenu(Bmbh,userName,myDataReader.GetString(1),m,myDataReader.GetInt32(0),myDataReader.GetBoolean(3));  
  }  
  myDataReader.Close();  
   
  }  
   
  //Get   Recorders  
  private   SqlDataReader   SelectData(string   Sql)  
  {  
  myConnection=new   SqlConnection(connString);  
  myCommand=new   SqlCommand(Sql,myConnection);  
  myConnection.Open();  
  return   myCommand.ExecuteReader();  
  }  
   
  //生成用戶UserB的菜單  
  private   void   button2_Click(object   sender,   System.EventArgs   e)  
  {  
  mainMenu1.MenuItems.Clear();  
  MenuItem   m=new   MenuItem();  
  string   sql="SELECT   y.mkbm,y.mkmc,y.sjmkbm,y.sfzjd   FROM   "+  
  "(select   a.js,b.mkbm   from   b_czryjs   a   left   join   b_qxqd   b   on   a.js=b.js   "+  
  "where   a.yhm='UserB'   and   a.bmbh='OYAMA001')x,b_mkqd   y   "+  
  "where   x.mkbm=y.mkbm   and   y.sjmkbm=999999   order   by   y.mkbm";  
  SqlDataReader   dr=SelectData(sql);  
  while   (dr.Read())  
  {  
  GenMenu("OYAMA001","UserB",dr.GetString(1),m,dr.GetInt32(0),false);  
  }  
  } 问题点数:100、回复次数:20Top

1 楼NiuNiuTZ(风满袖)回复于 2003-07-03 09:51:20 得分 0

現在菜單是出來了,但是我怎么加click事件并且我要在里面寫相應的處理代碼呢?  
  Top

2 楼TheAres(班门斧)回复于 2003-07-03 09:55:49 得分 5

用映射来完成,具体看看我写过的这个代码。  
   
  http://expert.csdn.net/Expert/topic/1612/1612509.xml?temp=.5595209Top

3 楼oh_love(小熊)回复于 2003-07-03 09:59:05 得分 1

m.MenuItems[0].Click   +=new   EventHandler(MenuItem_Click);Top

4 楼NiuNiuTZ(风满袖)回复于 2003-07-03 10:18:28 得分 0

TheAres(班门斧)兄:  
  那我還要生成xml文件才行嗎?小弟還是有點疑惑,請大哥指點!Top

5 楼confucian(唱反调的男人)回复于 2003-07-03 10:24:37 得分 1

让每一个menuitem加一个事件,可以对应到同一个处理方法  
  然后在方法里面根据sender的属性判断是哪一个对象触发的,做出不同的处理Top

6 楼confucian(唱反调的男人)回复于 2003-07-03 10:25:29 得分 1

这样无论是用for还是while来添加menuitem都可以  
  不一定非要用数组Top

7 楼NiuNiuTZ(风满袖)回复于 2003-07-03 10:36:16 得分 0

不是每個MenuItem都要加事件,只有最終的菜單項(相當與樹的葉子節點)才有click事件的Top

8 楼confucian(唱反调的男人)回复于 2003-07-03 10:47:57 得分 1

这个你自己判断哪个加哪个不加就好了  
  如果要加就写一句,例如:  
  ###.Click+=new   EventHandler(event_Handler);  
   
  然后下面有一个方法来处理:  
  private   void   event_Handler(object   sender,   System.EventArgs   e)  
  {  
  try  
  {  
  ImgControl   ic=(ImgControl)sender;  
  switch(ic.Text)  
  {  
  case:...  
  }  
   
  }  
  catch  
  {  
  ...  
  }  
  }Top

9 楼confucian(唱反调的男人)回复于 2003-07-03 10:51:45 得分 20

上面的ImgControl是我自己的东西,你改成MenuItem就可以了  
  如下:  
  private   void   event_Handler(object   sender,   System.EventArgs   e)  
  {  
  try  
  {  
  MenuItem   mi=(MenuItem)sender;  
  switch(mi.Text)  
  {  
  case:...  
  }  
   
  }  
  catch  
  {  
  ...  
  }  
  }  
  Top

10 楼jiezhi(风满袖)回复于 2003-07-03 11:50:40 得分 0

upTop

11 楼NiuNiuTZ(风满袖)回复于 2003-07-06 08:50:42 得分 0

upTop

12 楼xzgtysx(海带)回复于 2003-07-06 10:05:18 得分 0

confucian(唱反调的男人)  
  同意这个男人哈哈Top

13 楼liduke(天下有雪)回复于 2003-07-06 10:05:45 得分 1

*.Click+=new   EventHandler(eventhandle);  
  Top

14 楼chikinglau(king)回复于 2003-07-06 12:34:16 得分 1

注册事件,  
  m.Click   +=   new   EventHandler(m_click);Top

15 楼jiezhi(风满袖)回复于 2003-07-06 12:50:20 得分 0

看了看   confucian(唱反调的男人)   的做法,感覺可以。Top

16 楼NiuNiuTZ(风满袖)回复于 2003-07-15 11:37:13 得分 0

upTop

17 楼jiezhi(风满袖)回复于 2003-07-15 11:52:12 得分 60

copy的代碼:  
  //創建第一級菜單  
  public   static   void   MakeMenuItem(ref   System.Windows.Forms.MainMenu   MainMenu,string   strUserName,string   strDeptNo)  
  {  
  MainMenu.MenuItems.Clear();  
  MenuItem   m   =   new   MenuItem();  
  string   strSQL   =   "SELECT   distinct   y.mkbm,y.mkmc,y.sjmkbm,y.sfzjd   FROM   "  
  + "(select   a.js,b.mkbm   from   b_czryjs   a   inner   join   b_qxqd   b   on   a.js=b.js   "  
  +       "where   a.yhm='"+strUserName+"'   and   a.bmbh='"+strDeptNo+"')x,b_mkqd   y   "  
  + "where   x.mkbm=y.mkbm   and   y.sjmkbm   =   0     order   by   y.mkbm";  
   
  SqlDataReader   dr   =   SystemClass.SelectData(strSQL);  
   
  while   (dr.Read())  
  {  
  GenMenuItem(ref   MainMenu,strUserName,strDeptNo,dr.GetString(1),m,dr.GetInt32(0),dr.GetBoolean(3));  
  }  
   
  }  
  //創建相對應下級菜單  
  public   static   void   GenMenuItem(ref   System.Windows.Forms.MainMenu   MainMenu,string   strUserName,string   strDeptNo,string   Mkmc,MenuItem   m0,int   iniMkbm,bool   leaf)  
  {  
  MenuItem   m=new   MenuItem();  
  m.Text=Mkmc;  
  if   (iniMkbm.ToString().Length==4)  
  {  
  MainMenu.MenuItems.Add(m);  
  }  
  else  
  {  
  m0.MenuItems.Add(m);  
  if   (leaf)  
  {  
  m.Click+=new   EventHandler(event_Handler);  
  }  
  }  
  string   mySql="SELECT   distinct   y.mkbm,y.mkmc,y.sjmkbm,y.sfzjd   FROM   "+  
  "(select   a.js,b.mkbm   from   b_czryjs   a   inner   join   b_qxqd   b   on   a.js=b.js   "+  
  "where   a.yhm='"+strUserName+"'   and   a.bmbh='"+strDeptNo+"')x,b_mkqd   y   "+  
  "where   x.mkbm=y.mkbm   and   y.sjmkbm="+iniMkbm+"   order   by   y.mkbm";  
  SqlDataReader   myDataReader=   SystemClass.SelectData(mySql);  
  while   (myDataReader.Read())  
  {  
  GenMenuItem(ref   MainMenu,strUserName,strDeptNo,myDataReader.GetString(1),m,myDataReader.GetInt32(0),myDataReader.GetBoolean(3));  
  }  
  myDataReader.Close();  
  }  
  //菜單事件  
  public   static   void   event_Handler(object   sender,   System.EventArgs   e)  
  {  
  MenuItem   thisMenu=(MenuItem)sender;  
  string   strSql   =   "   select   MKBM   from   B_MKQD   where   MKMC   =   '"+thisMenu.Text+"'";  
  SqlCommand   cmd   =   new   SqlCommand();  
  cmd.Connection   =   SystemClass.GetConneciton();  
  cmd.CommandText   =   strSql;  
  SqlDataAdapter   da   =   new   SqlDataAdapter(cmd);  
  DataSet   ds   =   new   DataSet();  
  da.Fill(ds,"T");  
  //OYAMA.GUI為命名空間  
  string   strMKBM   =   "OYAMA.GUI.Frm"+ds.Tables["T"].Rows[0]["MKBM"].ToString();  
  testshowForm(strMKBM.Trim());  
  }  
   
  //顯示窗體  
  public   static   void   testshowForm(string   typeName)  
  {  
  //try  
  //{  
  Form   frm   =   (Form)Activator.CreateInstance(Type.GetType(typeName));  
  frm.ShowDialog();  
  //}  
  //catch  
  //{  
  // MessageBox.Show("沒有找到相對應的模塊","系統提示");  
  //}  
  }  
   
  Top

18 楼jiezhi(风满袖)回复于 2003-07-15 11:55:16 得分 7

就是要注意的是:窗體的命名為:Frm+模塊編號Top

19 楼brightheroes(在地狱中仰望天堂)回复于 2003-07-15 11:55:49 得分 1

给你动态生成的菜单加上一个click事件就可以了Top

20 楼lht0530(罗洪涛)回复于 2003-07-15 11:58:46 得分 1

*.Click+=new   System.EventHandler(*_click);Top

相关问题

  • 如何为动态生成的菜单项添加click事件
  • 请教:动态生成菜单的OnClick事件?
  • 如何为动态生成的控件产生事件(如:CLICK)
  • 怎样为用 NEW 生成的 LABEL添加CLICK事件?
  • 怎样编写动态生成的checkbox的click事件???
  • 关于响应动态生成铵钮的CLICK事件。
  • 动态生成按钮的click事件怎么不执行???
  • 动态生成ImageButton控件,怎么click事件没有响应?
  • winform中从数据库动态生成的菜单怎么生成这些菜单的单击事件?
  • 请教如何生成动态菜单及响应单击事件

关键词

  • js
  • mkbm
  • 動態
  • menuitem
  • inimkbm
  • mkmc
  • sjmkbm
  • strdeptno
  • bmbh
  • 菜單

得分解答快速导航

  • 帖主:NiuNiuTZ
  • TheAres
  • oh_love
  • confucian
  • confucian
  • confucian
  • confucian
  • liduke
  • chikinglau
  • jiezhi
  • jiezhi
  • brightheroes
  • lht0530

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo