ContextMenuStrip.Show в классе не вызывается - PullRequest
0 голосов
/ 01 декабря 2011

получил странный.

У меня есть класс, который содержит ContextMenuStrip, и при вызове .Show для него ничего не происходит. Я попытался записать в лог-файл, как вы можете видеть ниже, и первая строка была нажата, но как только она попадает в строку, где я пытаюсь ее показать, программа, похоже, работает так, как будто она встретила return. 1003 *

Вот класс:

class AnywhereMenu
{
    frmMain parent;
    KeyboardHook hook = new KeyboardHook();
    ContextMenuStrip anymenu = new ContextMenuStrip();

    public AnywhereMenu(frmMain _parent)
    {
        parent = _parent;
        populateContextMenu();
    }

    void populateContextMenu()
    {
        ToolStripMenuItem mnuTasks = new ToolStripMenuItem();
        ToolStripMenuItem mnuComments = new ToolStripMenuItem();
        ToolStripMenuItem mnuTools = new ToolStripMenuItem();

        mnuTasks.Text = "&Tasks";
        mnuTasks.DropDownItems.Add("Item1", null, new EventHandler(TaskHandler));
        mnuTasks.DropDownItems.Add("Item2", null, new EventHandler(TaskHandler));

        mnuComments.Text = "&Comments";
        mnuComments.DropDownItems.Add("Item1", null, new EventHandler(CommentHandler));
        mnuComments.DropDownItems.Add("Item2", null, new EventHandler(CommentHandler));
        mnuComments.DropDownItems.Add("Item3", null, new EventHandler(CommentHandler));

        mnuTools.Text = "Links//Tools";
        mnuTools.DropDownItems.Add("Item1", null, new EventHandler(ToolHandler));
        mnuTools.DropDownItems.Add("Item2", null, new EventHandler(ToolHandler));
        mnuTools.DropDownItems.Add("Item3", null, new EventHandler(ToolHandler));

        anymenu.Items.Add(mnuTasks);
        anymenu.Items.Add(mnuComments);
        anymenu.Items.Add(mnuTools);
    }

    public void MenuShow()
    {
        Settings.Save.debugLog("Displaying context menu!");
        anymenu.Show(Cursor.Position);
        return;
    }
}

И код, который его вызывает:

if (keyChar == "Space")
{
    Settings.Save.debugLog("Entered Context Menu Block");
    anyMenu.MenuShow();
    Settings.Save.debugLog("Exiting Context Menu Block");
}

Теперь в журнале отладки будет отображаться строка: «Введен блок контекстного меню», но не «Отображение контекстного меню!» или «Выход из блока контекстного меню». Есть идеи? Спасибо: -)

Редактировать - я забыл добавить, что он отлично работает на компьютере, на котором я его разработал, но на любом другом компьютере наблюдается описанное выше поведение. Не уверен, что здесь происходит: - (

...