【发布时间】:2017-10-08 17:57:02
【问题描述】:
我已经通过扩展面板和其他一些东西以编程方式添加了一个上下文菜单条, 它正在通过面板的构造函数设置到面板的上下文菜单中。
我第一次右击不起作用,然后总是在第一次之后。
我还尝试将 contextmenustrip 的构造函数及其分配给面板的上下文菜单放在其他地方,例如 Load 和表单的构造函数,甚至放在带有标志的计时器中,都产生了相同的结果..
编辑:(根据要求提供一些代码(原样并切入重点))
class FiniteAutomationController : System.Windows.Forms.Panel
{
public FiniteAutomationController()
: base()
{
this.ContextMenuStrip = (cms = new ContextMenuStrip());
}
public ContextMenuStrip cms;
}
编辑:(根据 blaze_125 的要求,更多代码)
//at form designer initializecomponents after Controller(FiniteAutomationController)'s initialization
this.Controller.cms.Opening += new System.ComponentModel.CancelEventHandler(this.cms_Load);
//at form code class
static State contextS = null;
static Action contextA = null;
private void cms_Load(object sender, CancelEventArgs e)
{
Controller.cms.Items.Clear();
if ((contextS = FiniteAutomationData.GetStateFrom(mouseX, mouseY)) != null) // Rclick States
{
Controller.cms.Items.Add("Delete"); Controller.cms.Items[0].Click += new EventHandler(cms_DeleteState);
Controller.cms.Items.Add("Rename"); Controller.cms.Items[1].Click += new EventHandler(cms_RenameState);
Controller.cms.Items.Add((contextS.final ? '\u2714' : ' ') + " Final"); Controller.cms.Items[2].Click += new EventHandler(cms_Final);
Controller.cms.Items.Add((contextS.initial ? '\u2714' : ' ') + " Initial"); Controller.cms.Items[3].Click += new EventHandler(cms_Initial);
Controller.cms.Items.Add("Trap"); Controller.cms.Items[4].Click += new EventHandler(cms_Trap);
if (!contextS.error.Equals(""))
{
Controller.cms.Items.Add("Error: " + contextS.error);
Controller.cms.Items[5].Enabled = false;
}
}
else if((contextA = FiniteAutomationData.GetActionFrom(mouseX,mouseY)) != null) // Rclick Action
{
Controller.cms.Items.Add("Delete"); Controller.cms.Items[0].Click += new EventHandler(cms_DeleteAction);
}
else // Rclick null
{
Controller.cms.Items.Add("Add State"); Controller.cms.Items[0].Click += new EventHandler(cms_AddState);
}
}
【问题讨论】:
-
给我们看一些代码。
-
点击事件等在哪里?我们需要更好地了解您的问题。代码为我们提供了价值千言万语的图片。尽你所能。