2011-04-05 115 views
1

我有一個C#應用程序,我動態填充,然後啓動一個名爲cmTestplan的上下文菜單。上下文菜單不會打開第一次點擊

private void cmTestplan_Opening(object sender, CancelEventArgs e) 
    { 
     if ((cmTestplan.SourceControl is TextBox) && 
     (cmTestplan.SourceControl.Enabled == true) && 
     (cmTestplan.SourceControl.Text != "")) 
     { 

      RightClickSetup(cmTestplan.SourceControl.Text); 
      cmTestplan.Show(); 
     } 

    } 

    private void RightClickSetup(string Path) 
    { 
     this.UseWaitCursor = true; 
     cmTestplan.Items.Clear(); 

     //Test for file or folder 
     if (Directory.Exists(Path) == true) 
     { 
      cmTestplan.Items.Add("Open folder"); 
      this.UseWaitCursor = false; 
     } 
     else if (File.Exists(Path) == true) 
     { 
      cmTestplan.Items.Add("Open folder"); 
      cmTestplan.Items.Add("Open file"); 
      this.UseWaitCursor = false; 
     } 
    } 

出於某種原因(我希望你細女士或先生們一個可能能夠提供)菜單未顯示在第一次與此cmTestplan相關聯的文本框我右鍵點擊。它會一直顯示在一個單一的右鍵單擊。

我試過註釋掉所有的文件/文件夾檢查,仍然得到了問題。

+1

嘗試放置一個靜態菜單,看看它是否顯示正確。如果是這樣,請嘗試以小塊加回動態邏輯,以確切查看事件鏈中斷的情況(它聞起來像是一個異常,但我沒有看到任何可能拋出它的東西)。此外,在事件開始時設置一個斷點,並檢查您的條件所基於的屬性是否都具有期望值。 – 2011-04-05 14:13:18

回答

5

您的菜單無法打開,因爲事件參數取消對於空菜單默認爲true。

只需在您的Opening事件處理程序中添加e.Cancel = false;;

RightClickSetup(cmTestplan.SourceControl.Text); 
    e.Cancel = false; 

..你也可以跳過「show」調用。

另請參見MSDN

+0

太棒了。非常感謝你。 – LeRascalier 2011-04-05 14:40:57

+0

也謝謝我。 – 2011-07-27 21:10:08

+1

這是在你瞭解它之後纔有意義的事情之一,但在你想出來之前踢你的屁股。謝謝。 – 2013-06-01 12:30:14

相關問題