0

我有一个ContextMenuStrip其中一个项目具有一个DropDownItems属性,该属性是动态添加的ToolStripMenuItem对象的集合。当我处理子项Click事件时,发送者的类型是ToolStripMenuItem,但它OwnerToolStripDropDownMenu. 我找不到如何从中确定“主机”ContextMenuStrip。它没有Owner自己的属性,并Parent返回 null。

当我使用下面@Steve 发布的代码的这种改编时:

Dim dropDownItem = DirectCast(sender, ToolStripDropDownItem)
Dim menu As ContextMenuStrip = DirectCast((((dropDownItem.DropDown).OwnerItem).OwnerItem).Owner, ContextMenuStrip)
Dim grid = menu.SourceControl

然后menu.SourceControlNothing,但是当我处理顶层时,即非下拉菜单项的点击是这样的

Dim item As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)
Dim strip As ContextMenuStrip = DirectCast(item.Owner, ContextMenuStrip)
Dim grid As DataGridView = DirectCast(strip.SourceControl, DataGridView)

然后我得到了我正在寻找的网格。

4

1 回答 1

0

如果我理解正确,您想从属于 ToolStripDropDownMenu 的 ToolStripMenuItem 的 Click 事件内部访问 ContextMenuStrip 对象。

如果是这样的话

   private void TestToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ToolStripDropDownItem x = sender as ToolStripDropDownItem;
        if (x != null)
        {
            ContextMenuStrip k = (((x.DropDown).OwnerItem).OwnerItem).Owner as ContextMenuStrip;
            k.ForeColor = Color.Red; // as an example.
        }
    }
于 2012-10-01T10:13:31.217 回答