我正在尝试向我的工具条的dropdownitems添加一个事件处理程序。目前,当我添加事件处理程序时,每次触发事件时,都会重复下拉列表。
我的工具条菜单项是项目,每个项目可以有多个任务。当用户单击任务时,将触发事件处理程序,该处理程序具有开始跟踪时间的方法。这也会创建一个新的菜单项来停止计时器。
如何配置代码以防止重复项?
提前致谢, 杰森
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 { }
}