2009-12-16 32 views

Trả lời

42

Đó là lỗi trong trình kết xuất "hệ thống", chi tiết trong this bug report.

Phản ứng của Microsoft đưa ra một cách giải quyết rất dễ dàng:

1) Tạo một lớp con của ToolStripSystemRenderer, trọng OnRenderToolStripBorder và làm cho nó một không-op:

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

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

2) Sử dụng renderer đó cho toolstrip của bạn:

toolStrip3.Renderer = new MySR(); 
+8

+1, nhưng tôi đã chỉnh sửa câu trả lời để thực sự * bao gồm * câu trả lời thay vì chỉ trỏ đến nó. StackOverflow nên đứng một mình, các liên kết bên ngoài có thể bị hỏng. Họ thực hiện một hỗ trợ tốt, nhưng nội dung chính nên được trên SO chính nó. –

+0

Tại sao việc này đóng ứng dụng của tôi? – RickInWestPalmBeach

8

Bạn có thể muốn thêm kiểm tra loại để tránh thiếu đường viền trên ToolStripDropDownMenu/v.v. (Kể từ khi thừa hưởng từ ToolStrip, nó bắt đầu cùng việc sử dụng tùy chỉnh renderer tự động):

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

nhỡ ToolStripDropDownMenu biên giới không phải là quá đáng chú ý trong khi sử dụng ToolStripSystemRenderer nhưng trở thành chướng mắt thực sự với ToolStripProfessionalRenderer.

Ngoài ra, thiết lập System.Windows.Forms.ToolStripManager.Renderer = new MySR(); có thể hữu ích nếu bạn muốn tất cả ToolStrip trường hợp trên toàn cầu sử dụng MySR theo mặc định.

Các vấn đề liên quan