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());
            }            
        }

しかし、問題は次のとおりです。データベースを左クリックしてから右クリックすると、メニューが表示されます。(+)を使用してオブジェクトツリーを展開し、すぐにデータベースを右クリックすると、メニューが表示されません。理由はわかりますが、この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

私は自分のSSMSアドインで、これと同じ問題にかなりの時間を費やしました。私が思いついたのは汚いハックですが、それを確実に機能させるために見つけることができた唯一の方法でした。

コンテキストメニューを開くためのショートカットであるSHIFT+F10を発行するために使用SendKeys.SendWaitします。これは、1回の発行でメニューの状態が切り替わるため(表示されている場合と表示されていない場合、またはその逆)、2回実行します。を使用すると、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})")
        }            
    }
于 2012-10-10T21:45:56.293 に答える