2010-12-31 234 views
10

ToolStripMenuItemの親をどのようにして決定できますか?通常のMenuStripでは、Parentプロパティを使用するだけで済みますが、ToolStripMenuItemにはそのプロパティがないようです。私は、ToolStripMenuItemsのカップルを持っているToolStripDropDownButtonを持っていると私はそれらのプログラムの親を正確に指摘できるようにしたいと思います。ToolStripMenuItemの親を取得するには

+0

[C# - MenuStripコードをToolStripに変換する]の複製が可能です。(http://stackoverflow.com/questions/4572381/c-convert-menustrip-code-to-toolstrip) –

+0

['Owner'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.owner.aspx)、['OwnerItem'](http://msdn.microsoft.com/en-us/)ライブラリ/ system.windows.forms.toolstripitem.owneritem.aspx)、および['Parent'](http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.parent.aspx) ['ToolStripMenuItem'クラス]によって公開されるプロパティ(http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripmenuitem.aspx)を参照してください。これらのどれもあなたのために働きませんか?あなたが達成しようとしていることとなぜそれが機能していないのかを理解することは難しいです。 –

+0

@ハンス、それは重複しているのではなく、問題の根本に到達するより正確な質問です。そしてその質問は私をどこにも与えてくれませんでした。あなたが成功しなくてもそれに答えようとしたとしても、あなたの答えは削除されました。 – user

答えて

13

OwnerItemプロパティを試してください。

+5

質問に対してコメントされています...これは、単一のユニットとして構築されたメニューでのみ機能します。別のContextMenuにDropDownプロパティを設定すると、階層が "分割"されます。 – AndrewD

3

ToolStripMenuItem t = (ToolStripMenuItem)sender; 
ContextMenuStrip s = (ContextMenuStrip)t.Owner; 
MessageBox.Show(s.SourceControl.Name); 
0

ここでは、これが私の作品

private void ContextMenuStrip_Opening(object sender, CancelEventArgs e) 
{ 
    contextMenuStrip1.Tag = ((ContextMenuStrip)sender).OwnerItem; 
} 
private void ToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    ToolStripMenuItem senderItem = (ToolStripMenuItem)sender; 
    var ownerItem = (ToolStripMenuItem)((ContextMenuStrip)senderItem.Owner).Tag; 
} 
5

を探しているものです.....これを試してください:あなたは、このことから

ToolStripMenuItem menuItem = sender as ToolStripMenuItem; 

ToolStrip toolStrip = menuItem.GetCurrentParent(); 

...ランダムなToolStripMenuItemから最上位レベルに移動する方法を工夫することができます:

public static class ToolStripItemExtension 
{ 
    public static ContextMenuStrip GetContextMenuStrip(this ToolStripItem item) 
    { 
     ToolStripItem itemCheck = item;    

     while (!(itemCheck.GetCurrentParent() is ContextMenuStrip) && itemCheck.GetCurrentParent() is ToolStripDropDown) 
     { 
      itemCheck = (itemCheck.GetCurrentParent() as ToolStripDropDown).OwnerItem; 
     } 

     return itemCheck.GetCurrentParent() as ContextMenuStrip; 
    } 
} 
関連する問題