Можно ли изменить элемент управления BackColor ToolStripSeparator? В дизайнере есть свойство BackColor, но оно, похоже, не используется - цвет всегда белый.Изменить BackColor элемента управления ToolStripSeparator
ответ
По умолчанию рендеринг toolstrip
игнорирует свойство BackColor и использует жестко закодированные цвета.
Вы можете ссылаться на следующую ссылку, чтобы использовать собственный рендерер для рисования разделителей так, как вы хотите.
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/6cceab5b-7e06-40cf-82da-56cdcc57eb5d
http://www.c-sharpcorner.com/uploadfile/mahesh/toolstrip-in-C-Sharp/
см выше ссылке. Надеюсь, это поможет!
Я вижу, вопрос был задан 2 года назад, но я все еще не могу найти простое и понятное решение для этого в Интернете. Итак ...
Я сегодня столкнулся с проблемой и обнаружил, что ее довольно просто решить.
Имея ту же ситуацию:
Решение:
Создать класс, который наследует ToolStripSeparator
класс и добавить метод к Paint
EventHandler
рисовать разделитель:
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);
Результат:
Я просто указал событие 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.
Я видел эту статью, но я ищу другое решение, я не думаю, что это лучшее решение. – Siwar
Я также исследовал его, но не нашел другой предполагаемой альтернативы, это была лучшая альтернатива практике. – Freelancer
Я помещаю этот код в Menu.designer.cs this.fileToolStripMenuItem.BackColor = System.Drawing.SystemColors.ButtonFace; но он не работает – Siwar