0

C# で winforms を使用する Visual Studio 2010 ではstatusStrip、ツールチップ ビューアとして を使用しています。ほとんどの場合Controls、プロパティを使用しbuttonsて文字列に変換し、with イベントのテキストとして挿入します。文字列は で置き換えられます。textBoxesTagstatusStripMouseEnterMouseLeave

で同じことができるようにしたいのですが、同じよう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場合、両方とも「null(0)」を に挿入します。mouseEntertooltipEntermenuItemTooltipEnterstatusStrip

menuItem Tagsと同じように処理されない理由を誰か教えてもらえますかtextBox Tags? この状況を改善するにはどうすればよいですか?

4

1 に答える 1

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);
    }
于 2013-10-11T15:04:37.467 に答える