Toolstripmenuitem подпункт - двойные записи - PullRequest
0 голосов
/ 23 февраля 2011

Я пытаюсь добавить обработчик событий в мои выпадающие элементы панели инструментов.В настоящее время, когда я добавляю обработчик события, каждый раз, когда событие срабатывает, выпадающие элементы дублируются.

Пункты меню моей панели инструментов - это проекты, и у каждого проекта может быть несколько задач.Когда пользователь нажимает на задачу, запускается обработчик событий, у которого есть метод, который начинает отслеживать время.Это также создает новый пункт меню, чтобы остановить таймер.

Как я могу настроить свой код для предотвращения дублирования элементов?

Заранее спасибо, Джейсон

private void SetupMenu()
{
    ctxMainMenu.Items.Clear();

    //ctxMainMenu.Refresh();
    _workItemValid = false;

    ToolStripMenuItem newMenu = null;

    if (_currentWorkItemID > 0)
    {
        newMenu = new ToolStripMenuItem("Stop Working On WorkItem:" + _currentWorkItemID);
        ctxMainMenu.Items.Add(newMenu);
        ctxMainMenu.Refresh();
    }

    try
    {
        //ctxMainMenu.Refresh();
        foreach (string projectName in checkedProjects.Items)
        {

            newMenu = new ToolStripMenuItem(projectName);
            //clear the menu before building a new one
            newMenu.DropDown.Items.Clear();
            ctxMainMenu.Refresh();
            newMenu.DropDownItems.AddRange(GetWorkItemMenuesForProject(projectName));
            //newMenu.DropDownItemClicked += new ToolStripItemClickedEventHandler(newMenuItem_DropDownItemClicked);
            ctxMainMenu.Items.Insert(0, newMenu);

        }
    }
    catch
    {
    }
}

private void newMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    try
    {
        if (e.ClickedItem.Text.Contains("Stop Working"))
        {
            StopWork();
        }
        else
        {
            if (_currentWorkItemID > 0)
            {
                SwitchToWorkItemTo(int.Parse(e.ClickedItem.Text.Split(':')[0].ToString()));
            }
            else
            {
                _currentWorkItemID = int.Parse(e.ClickedItem.Text.Split(':')[0].ToString());
                StartWork(_currentWorkItemID);
            }
        }
        ctxMainMenu.Refresh();
    }
    catch { }
}
...