2013-04-10 13 views

ответ

3

По умолчанию рендеринг toolstrip игнорирует свойство BackColor и использует жестко закодированные цвета.

Вы можете ссылаться на следующую ссылку, чтобы использовать собственный рендерер для рисования разделителей так, как вы хотите.

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/6cceab5b-7e06-40cf-82da-56cdcc57eb5d

+0

Я видел эту статью, но я ищу другое решение, я не думаю, что это лучшее решение. – Siwar

+0

Я также исследовал его, но не нашел другой предполагаемой альтернативы, это была лучшая альтернатива практике. – Freelancer

+0

Я помещаю этот код в Menu.designer.cs this.fileToolStripMenuItem.BackColor = System.Drawing.SystemColors.ButtonFace; но он не работает – Siwar

1

Я вижу, вопрос был задан 2 года назад, но я все еще не могу найти простое и понятное решение для этого в Интернете. Итак ...

Я сегодня столкнулся с проблемой и обнаружил, что ее довольно просто решить.

Имея ту же ситуацию:

enter image description here

Решение:

Создать класс, который наследует ToolStripSeparator класс и добавить метод к PaintEventHandler рисовать разделитель:

public class ExtendedToolStripSeparator : ToolStripSeparator 
{ 
    public ExtendedToolStripSeparator() 
    { 
     this.Paint += ExtendedToolStripSeparator_Paint; 
    } 

    private void ExtendedToolStripSeparator_Paint(object sender, PaintEventArgs e) 
    { 
     // Get the separator's width and height. 
     ToolStripSeparator toolStripSeparator = (ToolStripSeparator)sender; 
     int width = toolStripSeparator.Width; 
     int height = toolStripSeparator.Height; 

     // Choose the colors for drawing. 
     // I've used Color.White as the foreColor. 
     Color foreColor = Color.FromName(Utilities.Constants.ControlsRelatedConstants.standardForeColorName); 
     // Color.Teal as the backColor. 
     Color backColor = Color.FromName(Utilities.Constants.ControlsRelatedConstants.standardBackColorName); 

     // Fill the background. 
     e.Graphics.FillRectangle(new SolidBrush(backColor), 0, 0, width, height); 

     // Draw the line. 
     e.Graphics.DrawLine(new Pen(foreColor), 4, height/2, width - 4, height/2); 
    } 
} 

Затем добавить разделитель:

ToolStripSeparator toolStripSeparator = new ExtendedToolStripSeparator(); 

this.DropDownItems.Add(newGameToolStripMenuItem); 
this.DropDownItems.Add(addPlayerToolStripMenuItem); 
this.DropDownItems.Add(viewResultsToolStripMenuItem); 
// Add the separator here. 
this.DropDownItems.Add(toolStripSeparator); 
this.DropDownItems.Add(exitToolStripMenuItem); 

Результат:

enter image description here

1

Я просто указал событие Paint моих сепараторов для персонализированного прок:

private void mnuToolStripSeparator_Custom_Paint (Object sender, PaintEventArgs e) 
    { 
     ToolStripSeparator sep = (ToolStripSeparator)sender; 

     e.Graphics.FillRectangle(new SolidBrush(CUSTOM_COLOR_BACKGROUND), 0, 0, sep.Width, sep.Height); 

     e.Graphics.DrawLine(new Pen(CUSTOM_COLOR_FOREGROUND), 30, sep.Height/2, sep.Width - 4, sep.Height/2); 

    } 

Если CUSTOM_COLOR_FOREGROUND является твердым/named Color, например Color.White.

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