2010-12-31 49 views
10

Làm cách nào để xác định phụ huynh của một ToolStripMenuItem? Với một MenuStrip bình thường, tất cả những gì bạn phải làm là sử dụng thuộc tính Parent, nhưng có vẻ như ToolStripMenuItem không có thuộc tính đó. Tôi có một ToolStripDropDownButton có một vài ToolStripMenuItems và tôi muốn có thể xác định cha mẹ của những người có lập trình.C# - Nhận phụ huynh của ToolStripMenuItem

+0

bản sao có thể có của [C# - Chuyển đổi mã MenuStrip thành ToolStrip] (http://stackoverflow.com/questions/4572381/c-convert-menustrip-code-to-toolstrip) –

+0

Có ['Owner'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.owner.aspx), ['OwnerItem'] (http://msdn.microsoft.com/en-us/) library/system.windows.forms.toolstripitem.owneritem.aspx) và ['Parent'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.parent.aspx) thuộc tính được hiển thị bởi lớp ['ToolStripMenuItem'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripmenuitem.aspx). Do * none * của những công việc này cho bạn? Thật khó để hiểu những gì bạn đang cố gắng hoàn thành và tại sao nó không hoạt động. –

+0

@Hans, nó không phải là một bản sao mà là một câu hỏi chính xác hơn để đến gốc của vấn đề. Và câu hỏi đó đã khiến tôi không nơi nào, thậm chí bạn đã cố gắng trả lời nó mà không thành công và sau đó xóa câu trả lời của bạn. – user

Trả lời

13

Hãy thử thuộc tính OwnerItem.

+5

Như đã bình luận đối với câu hỏi ... điều này chỉ hoạt động cho các menu được tạo thành một đơn vị duy nhất. Đặt thuộc tính DropDown sang một ContextMenu khác "ngắt" phân cấp, tức là bạn chỉ có thể đi tới ContextMenu được đặt. – AndrewD

3

Hãy thử điều này .....

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

Đây là những gì bạn đang tìm kiếm

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

này làm việc cho tôi:

ToolStripMenuItem menuItem = sender as ToolStripMenuItem; 

ToolStrip toolStrip = menuItem.GetCurrentParent(); 

... từ này, bạn có thể đưa ra một phương pháp để đưa bạn từ một ToolStripMenuItem ngẫu nhiên lên cấp cao nhất như:

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; 
    } 
} 
Các vấn đề liên quan