如题,我现在用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不能正常选中,求解!!!
检查了一下,如果ContextMenuStrip只有一级菜单的话,里面的Item是可以选中的,但是如果存在二级菜单,ContextMenuStrip里面的Item就选不中了
用经典的ContextMenu,不要用ContextMenuStrip,默认ContextMenu不在工具箱里,你可以点工具箱,右键,添加删除,在里面找到添加过来。
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;
}