2011-04-05 116 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

相关问题