C# ContextMenuStrip如何强制更新(大小错误b/c我隐藏了其中的一些项)
我在一个ContextMenuStrip中有10个项目。我有一个开始事件处理程序,它决定10个项目中哪一个是可见的。基于应用程序逻辑,我可以通过设置Visible=false和Enabled=false来隐藏其中的许多 在显示6/10的情况下会发生什么。他们将是一个4区菜单项高度的空白空间,我第一次点击该条。如果我右键单击使它第二次出现,它会显示在它应该出现的位置。所以,这个条带基本上是为一个10项的条带计算的位置,而实际上它只是一个6项的条带 如何强制它重新计算? 以下是我尝试过的一些方法:C# ContextMenuStrip如何强制更新(大小错误b/c我隐藏了其中的一些项),c#,.net,winforms,contextmenustrip,C#,.net,Winforms,Contextmenustrip,我在一个ContextMenuStrip中有10个项目。我有一个开始事件处理程序,它决定10个项目中哪一个是可见的。基于应用程序逻辑,我可以通过设置Visible=false和Enabled=false来隐藏其中的许多 在显示6/10的情况下会发生什么。他们将是一个4区菜单项高度的空白空间,我第一次点击该条。如果我右键单击使它第二次出现,它会显示在它应该出现的位置。所以,这个条带基本上是为一个10项的条带计算的位置,而实际上它只是一个6项的条带 如何强制它重新计算? 以下是我尝试过的一些方法:
contextMenuStrip1.Refresh();
contextMenuStrip1.Update();
contextMenuStrip1.PerformLayout();
contextMenuStrip1.AutoSize = true;
ToolStripItem tempItem = contextMenuStrip1.Items.Add("temp");
contextMenuStrip1.Items.Remove(tempItem);
contextMenuStrip1.Refresh();
contextMenuStrip1.Update();
contextMenuStrip1.Invalidate();
您尝试过使用Invalidate()吗 从MSDN: 使控件的整个表面无效并导致控件失效 重新绘制。(从控件继承。) 也许您需要使用WM_PAINT message,我发现有时您需要在Winforms中使用SendMessage(Interop) 我发现
AutoSize = false;
AutoSize = true;
在所有项目操作工作完成后。还没有找到其他解决方案
在我的例子中,我在打开时添加项目(窗口的动态列表),有时项目标题比菜单长。谢谢你的建议。我不能再去测试了。但是,当我这样做的时候,我会回头看。