Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t在onClick事件中修改ToolStripMenuItems的属性_C#_.net_Winforms - Fatal编程技术网

C# Can';t在onClick事件中修改ToolStripMenuItems的属性

C# Can';t在onClick事件中修改ToolStripMenuItems的属性,c#,.net,winforms,C#,.net,Winforms,在我的onClick事件处理程序上,我正在执行以下操作: private void myToolStripItem_Click(object sender, EventArgs e) { Form form = (Form)(((taskBarToolStripMenuItem)sender).formReference); if (form != this.ActiveMdiChild) { if (!form.

在我的onClick事件处理程序上,我正在执行以下操作:

private void myToolStripItem_Click(object sender, EventArgs e)
    {
        Form form = (Form)(((taskBarToolStripMenuItem)sender).formReference);

        if (form != this.ActiveMdiChild)
        {
            if (!form.Visible)
                form.Show();
            form.Activate();

            ((taskBarToolStripMenuItem)sender).isSelected = true; //set it to true, so the renderer will draw them differently
        }
    }

taskBarToolStripMenuItem是ToolStripMenuItem的子类。当我使用自定义ToolStripSystemRenderer时,我确信其“isSelected”属性更改为true的项将保留为false。这发生在其他属性上,我尝试了标记、文本等。。。为什么?谢谢

您要做的是将
发送方
强制转换为
ToolStripMenuItem的一个实例
试着按这样的方式转换类型

((ToolStripMenuItem)sender).Selected = true;
如果要在许多地方使用它,可以将其设置为临时变量,以避免每次都取消装箱

private void myToolStripItem_Click(object sender, EventArgs e)
{
    var item = (ToolStripMenuItem)sender; // temp variable
    Form form = (Form)(item.formReference);

    if (form != this.ActiveMdiChild)
    {
        if (!form.Visible)
            form.Show();
        form.Activate();

        item.Selected = true; //set it to true, so the renderer will draw them differently
    }
}

我尝试过:var item=(ToolStripMenuItem)sender;item.Tag=“MYTAG”。然后,在渲染器的“OnRenderMenuItemBackground”上,我执行Console.WriteLine((ToolStripMenuItem)e.Item.Tag);我得到空值。是否有任何东西正在重写MenuItems属性?我很确定“var item=”和“e.item”是相同的引用。您确定没有将此渲染器与另一个项目上的渲染器混合使用吗?我必须在代码中尝试一下,结果很好。@helgeheldre我肯定。实际上,在myToolStripItem_Click()中,如果我对该项执行某些操作,如item.Text=“Change”,则该项的文本也不会更改。在我的例子中,似乎出于某种原因,发送方对象没有通过引用传递,因此我无法修改源对象。您使用的是toolStrip还是contextMenu?您是否需要在渲染器中执行操作?我认为框架处理ContextMenuStrip和ToolStrip渲染的方式有所不同,即使CMS继承了ToolStrip的渲染