Я пытаюсь дать пользователю визуальную подсказку, чтобы он мог видеть, что он щелкнул по определенной опции в ContextMenuStrip.
Я предпочитаю мигающий или мигающий курсор (или цвет bg), например: https://imgur.com/a/S1uK6yE
Я попытался использовать ответ здесь: https://stackoverflow.com/a/11777092/10012792, но это ни к чему не приводит, так как он должен использоваться с toolstripButton, а не ContextMenuStrip toolstripMenuItem.
Мне интересно, должен ли я пойти «ответ на щелчок элемента ContextMenuStrip»: Как ответить на элемент ContextMenuStrip, щелкнуть
События кликов:
private void Option1_Click(object sender, EventArgs e)
{ try
{ }
catch (Exception)
{ }
}
private void Option2_Click(object sender, EventArgs e)
{ try
{ }
catch (Exception)
{ throw; }
}
private void Option3_Click(object sender, EventArgs e)
{ try
{ }
catch (Exception ex)
{ }
}
Дизайнер:
this.ctm_options.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(57)))), ((int)(((byte)(57)))), ((int)(((byte)(65)))));
this.ctm_options.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripOption1,
this.toolStripOption2,
this.toolStripOption3,
this.toolStripSeparator1});
this.ctm_options.Name = "ctm_options";
this.ctm_options.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
this.ctm_options.Size = new System.Drawing.Size(181, 104);
this.ctm_options.Opening += new System.ComponentModel.CancelEventHandler(this.ctm_options_Opening);
Имейте в виду, я использую пользовательский рендер, чтобы иметь возможность изменить цвет наведения, например, так:
public class MyRenderer : ToolStripProfessionalRenderer
{
public MyRenderer()
: base(new MyColorTable())
{
}
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
var r = new Rectangle(e.ArrowRectangle.Location, e.ArrowRectangle.Size);
r.Inflate(-2, -6);
e.Graphics.DrawLines(Pens.Black, new Point[]{
new Point(r.Left, r.Top),
new Point(r.Right, r.Top + r.Height /2),
new Point(r.Left, r.Top+ r.Height)});
}
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
var r = new Rectangle(e.ImageRectangle.Location, e.ImageRectangle.Size);
r.Inflate(-4, -6);
e.Graphics.DrawLines(Pens.Black, new Point[]{
new Point(r.Left, r.Bottom - r.Height /2),
new Point(r.Left + r.Width /3, r.Bottom),
new Point(r.Right, r.Top)});
}
}
public class MyColorTable : ProfessionalColorTable
{
public override Color MenuItemBorder
{
get { return Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(120)))), ((int)(((byte)(215))))); ; }
}
public override Color MenuItemSelected
{
get { return Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(120)))), ((int)(((byte)(215))))); ; }
}
public override Color ToolStripDropDownBackground
{
get { return Color.FromArgb(((int)(((byte)(57)))), ((int)(((byte)(57)))), ((int)(((byte)(65))))); ; }
}
public override Color ImageMarginGradientBegin
{
get { return Color.FromArgb(((int)(((byte)(57)))), ((int)(((byte)(57)))), ((int)(((byte)(65))))); ; }
}
public override Color ImageMarginGradientMiddle
{
get { return Color.FromArgb(((int)(((byte)(57)))), ((int)(((byte)(57)))), ((int)(((byte)(65))))); ; }
}
public override Color ImageMarginGradientEnd
{
get { return Color.FromArgb(((int)(((byte)(57)))), ((int)(((byte)(57)))), ((int)(((byte)(65))))); ; }
}
}
public Form()
{
InitializeComponent();
this.ctm_options.Renderer = new MyRenderer();
}
Как бы я использовал код toolstripButton, упомянутый ранее, чтобы он работал и для toolstripMenuItems?
Или я должен подойти к этому другим методом?