将菜单项标记注入为字符串
本文关键字:字符串 注入 菜单项 | 更新日期: 2023-09-27 18:35:02
在 Visual Studio 2010 中使用 C# 上的 winforms,我使用 statusStrip
作为我的工具提示查看器。对于包括buttons
和textBoxes
在内的大多数Controls
,我使用的是 Tag
属性,转换为字符串,并将其作为带有事件MouseEnter
的statusStrip
中的文本注入;字符串在 MouseLeave
处替换。
我希望能够对MenuItems
做同样的事情,但是似乎它们的处理方式Controls
相同。我已经设置了一个"调试"字符串,以便我知道何时无法注入Tag
,这就是我知道MenuItems
处理方式不同的方式。
方法tooltipEnter
和menuItemTooltipEnter
的代码如下:
//Injects sender tag as string into status strip (used for Controls)
private void tooltipEnter(object sender, EventArgs e)
{
var c = sender as Control;
if (c == null) { toolStripStatusLabel1.Text = "null(0)"; return; }
toolStripStatusLabel1.Text = Convert.ToString(c.Tag);
}
//Injects sender tag as string into status strip (used for MenuItems)
private void menuItemTooltipEnter(object sender, EventArgs e)
{
var c = sender as MenuItem;
if (c == null) { toolStripStatusLabel1.Text = "null(0)"; return; }
toolStripStatusLabel1.Text = Convert.ToString(c.Tag);
}
如您所见,每当我用鼠标输入" Control
"时,字符串都会注入statusStrip
。我有这段代码在工作。
但是当menuItem
事件mouseEnter
指向tooltipEnter
或menuItemTooltipEnter
时,两者都会在statusStrip
中注入"null(0("。
有人可以告诉我为什么menuItem
Tags
的处理方式与textBox
Tags
不同吗?我该怎么做才能纠正这种情况?
我很
确定您使用的是ToolStripMenuItem
,而不是MenuItem
。这两个类彼此无关,因此当sender
类型为 ToolStripMenuItem
时,结果
var c = sender as MenuItem;
将永远null
.
请改用这个:
//Injects sender tag as string into status strip (used for MenuItems)
private void menuItemTooltipEnter(object sender, EventArgs e)
{
var c = sender as ToolStripMenuItem;
if (c == null) { toolStripStatusLabel1.Text = "null(0)"; return; }
toolStripStatusLabel1.Text = Convert.ToString(c.Tag);
}