将菜单项标记注入为字符串

本文关键字:字符串 注入 菜单项 | 更新日期: 2023-09-27 18:35:02

在 Visual Studio 2010 中使用 C# 上的 winforms,我使用 statusStrip 作为我的工具提示查看器。对于包括buttonstextBoxes在内的大多数Controls,我使用的是 Tag 属性,转换为字符串,并将其作为带有事件MouseEnterstatusStrip中的文本注入;字符串在 MouseLeave 处替换。

我希望能够对MenuItems做同样的事情,但是似乎它们的处理方式Controls相同。我已经设置了一个"调试"字符串,以便我知道何时无法注入Tag,这就是我知道MenuItems处理方式不同的方式。

方法tooltipEntermenuItemTooltipEnter的代码如下:

    //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时,两者都会在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);
    }