在使用C#上的winforms的Visual Studio 2010中,我使用statusStrip
作为我的工具提示查看器。对于大多数Controls
,包括buttons
和textBoxes
,我使用Tag
属性,转换为字符串,并将其作为statusStrip
中的文本注入事件MouseEnter
;该字符串将替换为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
时,都会将“null(0)”注入statusStrip
。
有人可以告诉我为什么menuItem
Tags
的处理方式与textBox
Tags
不同?我该怎么做才能解决这种情况?
答案 0 :(得分:1)
我很确定您使用的是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);
}