2012-07-02 98 views
5

Tôi mới đến lập trình Outlook để cho bước đầu tiên (hơn tiên tiến hơn) là nhiệm vụ sau đây:Cách truy cập Thanh công cụ Thanh tra trong Outlook?

  • Tạo một dải ruy băng mới (Ribbon1) tab (sẽ được hiển thị trong các nhà thám hiểm và thanh tra viên mới)
  • Khi lựa chọn (Khám phá) hoặc mở (Thanh tra) một mail tab ribbon nên hiển thị các chủ đề của mail (Như đã đề cập để kiểm tra)

phần Explorer là khá dễ dàng để có được đi nhưng tôi có các vấn đề đang làm ở trên để kiểm tra mới rs

Tôi đã thử các cách tiếp cận khác nhau nhưng không ai có vẻ làm việc:

  • tôi đã cố gắng trong NewInspector để tham khảo các Globals.Ribbons [thanh tra] .Ribbon1 nhưng đó luôn là null

  • Tôi đã thử trong NewInspector để đăng ký các sự kiện kích hoạt và làm điều đó từ đó nhưng trong đó các Application.ActiveInspector() là null và nếu tôi lưu trữ một bản sao toàn cầu của thanh tra từ sự kiện NewInspector nó không hoạt động trên thanh tra mới đầu tiên (chỉ sau lần thứ hai và trên các thư đã đọc). không phải trên soạn thư)

  • Tôi đã cố gắng sử dụng Ribbon tải sự kiện nhưng điều đó chỉ xảy ra lần đầu tiên

  • Tôi đã cố gắng sử dụng các thành viên Globals.Ribbons.Ribbon1 nhưng điều đó chỉ làm việc cho lần đầu tiên

(tôi đã tìm thấy rất nhiều mẫu NewInspector nhưng không ai dường như muốn thay đổi các dải ruy băng khác hơn một https://stackoverflow.com/questions/7852017/outlook-2007-ribbon-object-reference-not-set-to-an-instance-of-an-object này và cho rằng không có câu trả lời)

này được lái xe cho tôi điên ... có thực sự không có cách nào để làm một nhiệm vụ đơn giản như vậy !?

Mẫu mã để tham khảo

void InspectorsNewInspector(Outlook.Inspector inspector) 
    { 
     AddInspectorEventHandlers(inspector); 
    } 

    private void AddInspectorEventHandlers(Outlook.Inspector inspector) 
    { 
     if (inspector == null) 
     { 
      return; 
     } 

     Ribbon1 ribbon1 = Globals.Ribbons[inspector].Ribbon1; //This always return null!!! 

     ((Outlook.InspectorEvents_10_Event)inspector).Activate += InspectorActivate; 
     ((Outlook.InspectorEvents_10_Event)inspector).Close += InspectorClose; 

     _openInspectors.Add(inspector); 
    } 
+0

Chia sẻ nguồn của bạn cho cách bạn dây lên 'InspectorsNewInspector'. Toàn bộ lớp AddIn sẽ có lợi cho ngữ cảnh. – SliverNinja

Trả lời

0

Trong sự kiện này 'NewInspector', ruy băng tùy chỉnh của bạn nó không được nạp. Nếu bạn gỡ lỗi mã, Bạn sẽ thấy rằng nó chỉ sau sự kiện 'NewInspector' mà nó đi đến nhà thiết kế băng tùy chỉnh. Những gì bạn có thể làm là thực hiện những gì bạn cần trong sự kiện tải băng tùy chỉnh. Đó là

private void MyRibbon_Load(object sender, RibbonUIEventArgs e){} 

Tại đây, bạn có thể nhận thanh tra hiện hoạt hiện tại. Và từ đó bạn có thể nhận được món đồ bạn yêu cầu.

Ex:

 Inspector inspector = Globals.WPTAddIn.Application.ActiveInspector(); 
     if (inspector != null) 
     { 
      if (inspector.CurrentItem != null) 
      { 
       if (inspector.CurrentItem is MeetingItem) 
       { 
        MeetingItem meetingItem = (MeetingItem)inspector.CurrentItem;}}} 
0

tôi đã chạy vào cùng một vấn đề ngày hôm nay và đã đưa ra một cách giải quyết khác. Tôi đã cố gắng truy cập vào số Ribbon của một số MailItem Tôi vừa tạo.

Để khắc phục sự cố, tôi đã lặp qua từng dải băng trong Globals.Ribbons (không sử dụng trình chỉ mục thanh tra vì nó cung cấp cho bạn tham chiếu null). Với mỗi đối tượng Ribbon, tôi kiểm tra ngữ cảnh của nó là loại Inspector.Sau đó tôi có thể thực hiện kiểm tra bình đẳng trên số Inspector.CurrentItem để xác định liệu tham chiếu của chúng có bằng nhau hay không. Nếu họ đều bình đẳng mà tôi biết để sử dụng Ribbon

Dưới đây là một đoạn

Outlook.MailItem mail = (Outlook.MailItem)this.Application.CreateItem(Outlook.OlItemType.olMailItem); 
Outlook.Inspector currentInspector = (Outlook.Inspector)mail.GetInspector; 

Ribbon2 currentRibbon = null; 
foreach (Ribbon2 ribbon in Globals.Ribbons) 
{ 
    var ribbonInspector = (Outlook.Inspector)ribbon.Context; 
    if (ribbonInspector.CurrentItem.Equals(currentInspector.CurrentItem)) 
    { 
     currentRibbon = (Ribbon2)ribbon; 
     break; 
    } 
} 
Các vấn đề liên quan