2017-10-08 39 views
0

我已經通過面板的擴展以及其他一些東西以編程方式添加了contextmenustrip, 它通過面板的構造函數被設置到面板的contextmenu中。ContextMenuStrip第一次沒有被右鍵點擊顯示

第一次我右鍵單擊不起作用,然後它會在第一次總是。

我曾嘗試也把的ContextMenuStrip的構造和它在其他地方,如負載和窗體的構造,甚至在同一個標​​志,一個計時器面板的上下文菜單中分配,所有生產的同結果..

編輯:(根據要求(因爲它是切到重要點)的某些代碼)

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); 
     } 
    } 
+0

給我們一些代碼。 –

+0

我已經添加了代碼我猜..我不知道這個代碼會有多重要... – SHsuperCM

+0

至少,它表明努力完成您的目標。 –

回答

0

縱觀過去的3天,我設法找到一個解決方案,我認爲這是一個非常糟糕的一個,而是一個解決方案仍然..

我沒有使用控制器的MouseDown事件是什麼,並用標誌, 第一次顯示上下文菜單使用它的顯示(點)方法。

顯示方法放置菜單有點關閉,我決定在「新點(eX,e.Y + 45)」將其正確放置,但我仍然不喜歡我正在做的似乎真的不專業..

謝謝反正我猜..

相關問題