0

在 C# 上带有 winforms 的 Visual Studio 2010 中,我使用 astatusStrip作为工具提示查看器。对于大多数情况Controls,我正在使用该属性buttons,将其转换为字符串,并将其作为文本注入with 事件中;字符串被替换为。textBoxesTagstatusStripMouseEnterMouseLeave

我希望能够对 做同样的事情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指向tooltipEntermenuItemTooltipEnter时,两者都将“null(0)”注入statusStrip.

有人可以告诉我为什么menuItem Tags不以相同的方式处理,比如说,textBox Tags?我能做些什么来纠正这种情况?

4

1 回答 1

1

我很确定您使用的是 a ToolStripMenuItem,而不是 a 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);
    }
于 2013-10-11T15:04:37.467 回答