C# 动态添加2级下拉菜单问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 动态添加2级下拉菜单问题相关的知识,希望对你有一定的参考价值。

代码如下:
private void MenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

try

string cmdText1 = " SELECT PRO_ID,PRO_NM,PRO_TYPE,PRO_NO,USE_YN FROM WMS_PROMENU ";

SqlConnection myConn = new SqlConnection(global::KHS.WMS.APP.Properties.Settings.Default.conStr);
SqlDataAdapter adapter1 = new SqlDataAdapter(cmdText1, myConn);
DataSet ds1 = new DataSet();
adapter1.Fill(ds1);

((System.Windows.Forms.ToolStripDropDownItem)(e.ClickedItem)).DropDownItems.Clear();
foreach (DataRow dr1 in ds1.Tables[0].Select("PRO_TYPE='" + e.ClickedItem.Name + "'AND USE_YN ='1' "))

ToolStripMenuItem mi = new ToolStripMenuItem();
mi.Text = dr1["PRO_NM"].ToString();
mi.Name = dr1["PRO_ID"].ToString();
mi.Tag = dr1["PRO_TYPE"].ToString();
mi.Click += new EventHandler(inItem_Click);
((System.Windows.Forms.ToolStripDropDownItem)(e.ClickedItem)).DropDownItems.Add(mi);


addFixMenu();

catch




为什么每次我执行这段程序的时候第一个按钮的点击事件没事,而点击第二个按钮的话,ToolStripDropDownItem的位置却跑到了程序的最左上角处了。该怎么解决啊?

参考技术A 能给看看inItem_Click事件的方法吗?
在这里有没有动态设定ToolStripDropDownItem显示的位置啊?

解决element生成的下拉菜单,不在父级之下,而是在body之下,通过父级控制该下拉菜单的样式,达到不跟别的地方冲突的目的

项目中存在多个下拉菜单,每个下拉菜单的样式可能不同

不能直接拿到element里面的类名来修改,这样会导致全局统一

在下拉菜单上定义一个父级类名,通过这个父级类名来定义这些下拉菜单的样式,达到私有化

 

遇到问题,生成的下拉菜单跟父类不在同一个节点,无法通过父级类来指定样式

技术图片

 

 

技术图片

 

 

解决方案:在下拉菜单的结构上添加 ref,页面加载后动态添加父级类名

技术图片

 

 

技术图片

 

 技术图片

 

以上是关于C# 动态添加2级下拉菜单问题的主要内容,如果未能解决你的问题,请参考以下文章

动态添加的下拉菜单不应用 jQuery

选择下拉菜单后,动态输入字段无法正确显示

C#如何实现动态添加右键菜单

解决element生成的下拉菜单,不在父级之下,而是在body之下,通过父级控制该下拉菜单的样式,达到不跟别的地方冲突的目的

Laravel 动态依赖下拉菜单

c#中如何动态添加菜单项并实现其点击?