Хорошо, это не очень элегантно, так что терпите меня.
Кажется, что ToolTipText изначально рисуется сверху, но как только при следующей загрузке ToolStripMenuItems (те, что были вызваны "Insert Action" в вашем случае), оба набора MenuStrips оказываются выше ToolTipText. Итак, моя мотивация состояла в том, чтобы заставить ToolTipText появляться ПОСЛЕ новой загрузки MenuStrip.
Итак, сначала я добавил обработчик DropDownOpened в myToolStripMenuItem, который будет таким, какой вы назвали ваш «Вставить действие ...» MenuItem.
Затем я добавил следующий код
private void myToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
myToolStripMenuItem.Visible = false;
myToolStripMenuItem.Visible = true;
myToolStripMenuItem.ToolTipText = "Tooltip info that you want to see!";
}
То, что это делает, ждет загрузки подменю, переключает видимость myToolStripMenuItem (который является уродливой частью всего этого) и сбрасывает ToolTipText, заставляя его отображаться после того, как все загружено, а также в верхней части все.
Однако, если оставить это так, это приведет к некоторому миганию текста, если вы попытаетесь парить и уходить дважды или более. Попробуйте с этим кодом, и вы поймете, что я имею в виду. Итак, вы должны сбросить ToolTipText в пустую строку. Я сделал это, когда сработало событие DropDownClosed для того же MenuItem.
private void myToolStripMenuItem_DropDownClosed(object sender, EventArgs e)
{
myToolStripMenuItem.ToolTipText = "";
}
Теперь, ToolTipText появляется точно, когда и где мы хотим, чтобы он появлялся без каких-либо мерцаний.
ПРИМЕЧАНИЕ: Этот метод приведет к тому, что ToolTipText будет отображаться немного дольше, чем обычно. Это, конечно, потому что код ожидает загрузки выпадающего меню. Кроме того, переключение myToolStripMenuItem.Visible иногда вызывает мерцание в меню. Тем не менее, я чувствую, что это гораздо лучше, чем показывать всплывающую подсказку, которую вы не можете видеть.