2009-12-16 21 views

Odpowiedz

42

To błąd w rendererze "systemowym", szczegóły w this bug report.

Odpowiedź Microsoftu daje bardzo łatwe rozwiązania:

1) Utwórz podklasę ToolStripSystemRenderer, zastępując OnRenderToolStripBorder i uczynienie go no-op:

public class MySR : ToolStripSystemRenderer 
{ 
    public MySR() { } 

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
    { 
     //base.OnRenderToolStripBorder(e); 
    } 
} 

2) Za pomocą tego mechanizmu renderującego dla ToolStrip:

toolStrip3.Renderer = new MySR(); 
+8

+1, ale zredagowałem odpowiedź, aby faktycznie * zawierała * odpowiedź, a nie tylko ją wskazywała. StackOverflow powinien działać samodzielnie, zewnętrzne łącza mogą gnić. Stanowią dobre uzupełnienie, ale główna treść powinna dotyczyć samego SO. –

+0

Dlaczego to zamyka moją aplikację? – RickInWestPalmBeach

8

Możesz chcieć dodać sprawdzanie typu, aby uniknąć brakuje granicę na ToolStripDropDownMenu/etc. (Od odziedziczony ToolStrip, automatycznie uruchamia samo wykorzystanie niestandardowych renderujący):

protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
{ 
    if (e.ToolStrip.GetType() == typeof(ToolStrip)) 
    { 
     // skip render border 
    } 
    else 
    { 
     // do render border 
     base.OnRenderToolStripBorder(e); 
    } 
} 

Niewykorzystany ToolStripDropDownMenu granica nie jest wyczuwalny podczas korzystania ToolStripSystemRenderer ale stają się prawdziwe paskudztwo z ToolStripProfessionalRenderer.

Również ustawienie System.Windows.Forms.ToolStripManager.Renderer = new MySR(); może być przydatne, jeśli chcesz, aby wszystkie instancje ToolStrip były używane domyślnie do korzystania z MySR.

Powiązane problemy