2012-05-08 20 views
1

SSMS 2008R2 \ 2012オブジェクトエクスプローラで右クリックメニューを追加するには? 私はこのトピックを研究しました。私自身の右クリックメニューを追加するには?

私はこの方法で行います。

private void Provider_SelectionChanged(object sender, NodesChangedEventArgs args) 
     {    
      INodeInformation[] nodes; 
      int nodeCount; 

      objectExplorer.GetSelectedNodes(out nodeCount, out nodes); 
      INodeInformation node = (nodeCount > 0 ? nodes[0] : null); 

      if (_databaseMenu == null && 
       _databaseRegex.IsMatch(node.Context)) 
      { 
       _databaseMenu = (HierarchyObject)node.GetService(typeof(IMenuHandler)); 
       _databaseMenu.AddChild(string.Empty, new MenuItem()); 
      }    
     } 

をしかし、問題がある:私は、データベース上で左クリックをして、次に右クリックした場合 - 私は私のメニューを参照してください、[OK]をクリックします。オブジェクトツリーを(+)で展開し、すぐにデータベースを右クリックすると、メニューが表示されません。 私はそれがなぜこの問題を解決するかを理解していますか?

+0

これまでにこの問題を解決できましたか? –

答えて

0

私は自分のSSMSアドインでこの同じ問題に取り組むのにかなりの時間を費やしました。私が思いついたのは汚れたハックですが、確実に動作させるには唯一の方法でした。

コンテキストメニューを開くためのショートカットであるSHIFT + F10を発行するのにSendKeys.SendWaitを使用します.1回発行するとメニューの状態が切り替わります(逆もまたは逆も同様です)。 UIは応答を停止し、最終的にSendを使用した場合はスローされますので、必ずSendWaitを使用してください。

右クリックしたときにメニューの左クリックまたはちらつきに若干の遅延があります。そして、もちろん、ユーザーがそのショートカットを変更した(または外部のマクロを置き換えた)場合、SSMSオプションをすばやく見てもコンテキストメニューのショートカットを変更することはできません。

private void Provider_SelectionChanged(object sender, NodesChangedEventArgs args) 
    {    
     INodeInformation[] nodes; 
     int nodeCount; 

     objectExplorer.GetSelectedNodes(out nodeCount, out nodes); 
     INodeInformation node = (nodeCount > 0 ? nodes[0] : null); 

     if (_databaseMenu == null && 
      _databaseRegex.IsMatch(node.Context)) 
     { 
      _databaseMenu = (HierarchyObject)node.GetService(typeof(IMenuHandler)); 
      _databaseMenu.AddChild(string.Empty, new MenuItem()); 
      SendKeys.SendWait("+({F10})") 
      SendKeys.SendWait("+({F10})") 
     }    
    } 
関連する問題