3

我在 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();
4

2 回答 2

4

我发现

AutoSize = false;
AutoSize = true;

毕竟项目操作工作。没有找到其他解决方案。

就我而言,我在打开时添加项目(窗口的动态列表),有时项目标题比菜单长。

于 2013-01-16T14:04:56.943 回答
0

您是否尝试过使用 Invalidate()?

来自 MSDN:

使控件的整个表面无效并导致控件被重绘。(继承自控制。)

也许您需要使用 WM_PAINT 消息,我发现有时您需要将 SendMessage (Interop) 与 Winforms 一起使用。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd145213(v=vs.85).aspx

于 2012-07-09T06:48:43.820 回答