2

リボンのロード時に ActiveInspector にアクセスすることは可能ですか。Application.ActiveInspector() は、カスタム フォームを使用すると適切な値を返しますが、デフォルトの連絡先フォームでは返されません。

ActiveInspector().CurrentItem のプロパティ値に応じてリボン ボタンをカスタマイズするには、ActiveInspector が必要です。

4

2 に答える 2

1

開いているインスペクターのリストを維持するという点で、上記を少し変更します (インスペクターをラップしてリストに保持します)。それらを新しいインスペクターイベントに追加し、ワイヤーアップクローズイベントクローズでそれらを削除します。

私のリボン コードには、リボンの control.context を使用してインスペクターを見つける静的メソッド FindOutlookInspector があります。

これらの線に沿った何か..

OutlookInspector は私のラップされたインスペクター クラスですが、それは必要ないかもしれません。また、私はメール アイテムだけを気にします

void _inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) {
    OutlookItem olItem = null;
    try {
        object newitem = Inspector.CurrentItem;
        olItem = new OutlookItem(newitem);
        if (olItem.Class == Outlook.OlObjectClass.olMail && olItem.MessageClass == "IPM.Note") {

            OutlookInspector existingWindow = FindOutlookInspector(Inspector);

            if (existingWindow == null) {
                OutlookInspector window = new OutlookInspector(Inspector);

                window.Close += new EventHandler(WrappedWindow_Close);
                _windows.Add(window);
            }

        } catch (Exception ex) {
            throw ex;
        }
    }

    void WrappedWindow_Close(object sender, EventArgs e) {
        OutlookInspector window = (OutlookInspector) sender;
        window.Close -= WrappedWindow_Close;
        _windows.Remove(window);
    }

    internal static OutlookInspector FindOutlookInspector(object window) {
        foreach(OutlookInspector inspector in _windows) {
            if (inspector.Window == window) {
                return inspector;
            }
        }
        return null;
    }

次に、リボン コードでFindOutlookInspector、ラップされたインスペクターを取得するために呼び出すことができます

 OutlookInspector window = ThisAddIn.FindOutlookInspector(control.Context);
于 2009-05-28T09:41:38.647 に答える
0

Inspectors コレクションの NewInspector イベントを処理し、リボンのロード イベントからアクセスできる静的フィールド (おそらく WeakReference を使用する必要があります) でそれを保持できますか?

Outlook でリボンのカスタマイズを行ったことはありませんが、古い Tablet PC 製品である TEO のインスペクタを使用して広範な作業を行いました。それらを扱うのは面倒ですが、Outlook をシャットダウンしたり、保留中の編集をキャンセルしたりすると、あらゆる種類の奇妙な問題が発生するため、Inspector の参照に長時間固執することは望ましくありません。

于 2009-05-28T06:40:37.577 に答える