Я думал, что ключом будет 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
{
}
}
Что случилось с 'ToolStripDropDownMenu.Parent'? – InBetween