将menuItem标记注入字符串

时间:2013-10-11 14:07:58

标签: c# string winforms properties tooltip

在使用C#上的winforms的Visual Studio 2010中,我使用statusStrip作为我的工具提示查看器。对于大多数Controls,包括buttonstextBoxes,我使用Tag属性,转换为字符串,并将其作为statusStrip中的文本注入事件MouseEnter;该字符串将替换为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时,都会将“null(0)”注入statusStrip

有人可以告诉我为什么menuItem Tags的处理方式与textBox Tags不同?我该怎么做才能解决这种情况?

1 个答案:

答案 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);
    }