2015-06-11 6 views
1

Я пишу обычай ToolStripProfessionalRendererПолучить (ToolStrip) Родитель ToolStripDropDownMenu

Возьмем, к примеру, следующее переопределение:

protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) 
{ 
    if(e.ToolStrip is MenuStrip) 
    { 
     // It never is. It's always ToolStripDropDownMenu 
    } 
} 

Я предполагаю, что OnRenderImageMargin вызывается из выпадающего меню, так как это это то, что будет сделано, однако я хочу получить родителя ToolStrip/MenuStrip/StatusStrip, который вызвал звонок OnRenderImageMargin.

Возможно ли это?

+0

Что случилось с 'ToolStripDropDownMenu.Parent'? – InBetween

ответ

1

Я думал, что ключом будет e.ToolStrip.Parent, но это всегда null.

Один из вариантов - создать конструктор в ToolStripProfessionalRenderer и передать ссылку на элемент управления.

class CustomRenderer : ToolStripProfessionalRenderer 
{ 
    // All those controls derive from ToolStrip so we can use the base class here 
    private ToolStrip ts; 

    public CustomRenderer(ToolStrip ts) 
    { 
     this.ts = ts; 
    } 

    protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) 
    { 
     if (ts is MenuStrip) 
     { 
     } 
     else if (ts is StatusStrip) 
     { 
     } 
     else // ts is ToolStrip 
     { 
     } 
    } 

Затем передать ссылку, когда вы создаете его экземпляр:

toolStrip1.Renderer = new CustomRenderer(toolStrip1); 

statusStrip1.Renderer = new CustomRenderer(statusStrip1); 

Альтернативный вариант, модифицированный из this answer.

Забудьте CTOR и проверить Owner несколько раз, пока вы не получите правильного управления родительскую:

protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) 
{ 
    ToolStrip owner = e.ToolStrip; 
    while (owner is ToolStripDropDownMenu) 
     owner = (owner as ToolStripDropDownMenu).OwnerItem.Owner; 

    if (ts is MenuStrip) 
    { 
    } 
    else if (ts is StatusStrip) 
    { 
    } 
    else // ts is ToolStrip 
    { 
    }  
} 

 Смежные вопросы

  • Нет связанных вопросов^_^