Вы можете изменить шрифт для ToolStripMenuItem в пользовательском рендерере
У меня есть меню с пользовательским рендерером:
menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors());
Есть ли способ изменить шрифт или сделать пункт меню курсивом при наведении на него курсора?
У меня есть событие, чтобы изменить фон, но не знаете о шрифте / цвет шрифта?
internal class MenuColors : ProfessionalColorTable
{
public override Color MenuItemSelected
{
get { return MenuHoverColor; }
}
}
2 ответа
Вы можете наследовать от ToolStripProfessionalRenderer и переопределять OnRenderItemText и использовать ToolStripItemTextRenderEventArgs, как показано ниже:
public class SampleRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
// Here set e.TextFont, e.TextColor and so on, For example:
if (e.Item.Selected)
{
e.TextColor = Color.Blue;
e.TextFont = new Font(e.Item.Font, FontStyle.Italic | FontStyle.Bold);
}
base.OnRenderItemText(e);
}
}
Вы можете использовать свойства e.Item, чтобы решить, что делать в различных ситуациях, например, если вы хотите, чтобы логика работала только в подменю, вы можете использовать код, подобный следующему:
if (e.Item.Selected && e.Item.OwnerItem != null)
Вы можете изменить ForeColor и Font Property вручную, используя свойства ToolStrip, и Renderer будет использовать их при рендеринге.
И если вы хотите использовать другой шрифт и цвет при вводе мышью или при выборе элемента, вам следует обработать подходящие события, чтобы изменить шрифт и цвет в этих значениях, например, код ниже меняет шрифт элемента на курсив, когда мышь над элементом:
private void toolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
var item=(ToolStripMenuItem)sender;
item.ForeColor = Color.Blue;
item.Font = new Font(item.Font, FontStyle.Italic | FontStyle.Bold );
}
private void toolStripMenuItem_MouseLeave(object sender, EventArgs e)
{
var item = (ToolStripMenuItem)sender;
item.ForeColor = Color.Green;
item.Font = new Font(item.Font, FontStyle.Regular);
}
Вы можете назначить эти обработчики для ваших ToolStripMenuItems динамически следующим образом:
YourToolStripMenuItem.MouseEnter += new System.EventHandler(this.toolStripMenuItem_MouseEnter);
YourToolStripMenuItem.MouseLeave += new System.EventHandler(this.toolStripMenuItem_MouseLeave);
Вот снимок экрана пользовательского средства визуализации, которое я использую для набора инструментов со стилями Office 2003, когда я изменил шрифт и цвет ToolStripButtons и ToolStripMenuItems, а затем, когда мышь находится над элементом, я изменяю его стиль шрифта на жирный, курсив и его цвет. зеленый