我認爲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修改。
忘記構造函數和測試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