TechLiuCC
2018-07-05 05:43
采纳率: 0%
浏览 1.7k

右键菜单栏ContextMenuStrip使用问题

如题,我现在用C#编写了一个COM组件,里面有一个UserControl控件,还控件绑定的有右键菜单栏事件,使用了控件ContextMenuStrip,
1、然后在winform里面的一个窗体中使用Form.Controls.Add()form为模态显示,将COM中的Usercontrol添加进去,改UserControl可以正常使用
2、VB里面调用COM里面的UserControl时,是使用了网上的一个AppendToContainerControl(int Handle)方法通过句柄,然后调用windosAPI的SetParent,将COM中的UserControl控件添加到Form中去的,改Form也是模态显示的。但是在操作过程中自己在UserControl添加的右键菜单栏显示后里面的Item不能正常选中,求解!!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • TechLiuCC 2018-07-05 07:02

    检查了一下,如果ContextMenuStrip只有一级菜单的话,里面的Item是可以选中的,但是如果存在二级菜单,ContextMenuStrip里面的Item就选不中了

    点赞 打赏 评论
  • blownewbee 2018-07-05 07:41

    用经典的ContextMenu,不要用ContextMenuStrip,默认ContextMenu不在工具箱里,你可以点工具箱,右键,添加删除,在里面找到添加过来。

    点赞 打赏 评论
  • 梦l想l起l航 2018-07-05 07:50

    1.添加contextMenuStrip控件 默认命名:contextMenuStrip1

    2.在要显示的控件上,找到其ContextMenuStrip属性,并设置其为contextMenuStrip1

    比如我这边放在 dataGridView1 控件上,就将dataGridView1的ContextMenuStrip属性,设置为contextMenuStrip1

    3.将dataGridView1的CellMouseDown事件下写入下列代码

        //在右键点击时,将当前行选中
        private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Right && e.RowIndex >= 0)
            {
                if (!dataGridView1.Rows[e.RowIndex].Selected)
                {
                    dataGridView1.ClearSelection();
                    dataGridView1.Rows[e.RowIndex].Selected = true;
                }
                contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
            }
        }
    

    4.为ToolStripMenuItem 控件添加Click事件

        private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //获取当前选中行的索引t22
            int selectRow = dataGridView1.CurrentRow.Index;
            if (selectRow < 0)
                return;
        }    
    
    点赞 打赏 评论

相关推荐 更多相似问题