2008-11-16 5 views
7

Những gì tôi muốn làm là có VS2008, khi tôi mở một tệp mã, thu gọn tất cả các thành viên của các lớp/giao diện trong tệp theo mặc định (bao gồm, quan trọng, bất kỳ tài liệu XML và nhận xét nào).Có cách nào để xác định phác thảo mặc định trong Visual Studio 2008 để một tệp mở ra với các thành viên bị thu gọn theo mặc định không?

Tôi thực hiện không phải muốn sử dụng các vùng.

Tôi cũng muốn có thể sử dụng liên kết ctrl + m, ctrl + l để chuyển đổi tất cả thành viên thành viên (ví dụ: nếu mọi thứ bị thu gọn, tôi muốn mở rộng tất cả thành viên, nhưng không phải là nhận xét hoặc tài liệu XML).

Có thể? Làm sao?

Trả lời

5

Yes để phần 1.

Không chắc chắn về phần 2.

Để có VS2008 file tự động mở trong một trạng thái Đã thu gọn bạn sẽ cần phải tạo ra một addin để chạy "Edit.CollapsetoDefinition" khi mỗi tài liệu mở ra.

Đây không phải là quá phức tạp - Các phần khó có vẻ là bạn phải chạy mã một vài phần nghìn giây sau khi tài liệu được mở thực sự, do đó bạn cần phải sử dụng hồ bơi để làm điều đó.

  1. Tạo dự án Addin cho VS2008.
  2. Thêm mã này (xem phần sau) vào cuối Phương thức OnConnection của lớp Connect.

    switch (connectMode) 
    { 
     case ext_ConnectMode.ext_cm_UISetup: 
     case ext_ConnectMode.ext_cm_Startup: 
      //Do nothing OnStartup will be called once IDE is initialised. 
      break; 
     case ext_ConnectMode.ext_cm_AfterStartup: 
      //The addin was started post startup so we need to call its initialisation manually 
      InitialiseHandlers(); 
      break; 
    } 
  1. Thêm phương pháp này để lớp Connect

    private void InitialiseHandlers() 
    { 
     this._openHandler = new OnOpenHandler(_applicationObject); 
    } 
  1. Thêm một cuộc gọi đến InitialiseHandlers() vào phương thức OnStartupComplete của lớp Connect.

    public void OnStartupComplete(ref Array custom) 
    { 
     InitialiseHandlers(); 
    } 
  1. Thêm lớp này đến dự án.

    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using EnvDTE80; 
    using EnvDTE; 
    using System.Threading; 

    namespace Collapser 
    { 
     internal class OnOpenHandler 
     { 
      DTE2 _application = null; 
      EnvDTE.Events events = null; 
      EnvDTE.DocumentEvents docEvents = null; 

      internal OnOpenHandler(DTE2 application) 
      { 
       _application = application; 
       events = _application.Events; 
       docEvents = events.get_DocumentEvents(null); 
       docEvents.DocumentOpened +=new _dispDocumentEvents_DocumentOpenedEventHandler(OnOpenHandler_DocumentOpened); 
      } 

      void OnOpenHandler_DocumentOpened(EnvDTE.Document document) 
      { 
       if (_application.Debugger.CurrentMode != dbgDebugMode.dbgBreakMode) 
       { 
        ThreadPool.QueueUserWorkItem(new WaitCallback(Collapse)); 
       } 
      } 

      private void Collapse(object o) 
      { 
       System.Threading.Thread.Sleep(150); 
       _application.ExecuteCommand("Edit.CollapsetoDefinitions", ""); 
      } 
     } 
    } 

Và bây giờ tất cả các tệp đã mở sẽ được thu gọn hoàn toàn.

0

Sẽ dễ dàng hơn nhiều khi sử dụng Visual Studio Macros để thực hiện tương tự. Việc chỉnh sửa "EnvironmentEvents" tập tin vĩ mô trong MyMacros và thêm một handler cho DocumentEvents.DocumentOpened với:
DTE.ExecuteCommand ("Edit.CollapsetoDefinitions")

+0

Bạn có thể làm rõ làm thế nào bạn sẽ làm điều này? Tôi đã thêm câu trả lời (http://stackoverflow.com/questions/293806/is-there-a-way-to-specify-outlining-defaults-in-visual-studio-so-that-a-file-open/1050267 # 1050267) cho câu hỏi này nhưng không thể lấy mã macro của tôi để hoạt động. –

0

Tôi đã cố gắng làm việc ra một số mã Visual Basic cho một macro bản thân mình, vay từ những nơi khác nhau, và không thể kiếm được gì để làm việc. Vậy tôi đã làm gì? Tại sao, tôi hỏi a question trên StackOverflow tất nhiên! Nó đã được trả lời, tôi đã thêm mã được đề xuất vào macro EnvironmentEvents của tôi và bây giờ khi tôi mở tệp CS, sau khoảng một giây, tất cả các định nghĩa của tôi đều bị thu gọn.:)

0

Một cách nhanh chóng sụp đổ tất cả phác thảo để hàm nghĩa là để nhấn: ContextMenu nút * (bên cạnh nút cửa sổ bên phải của bạn) *, L, O

tôi sử dụng nó mọi lúc. Nếu có một phím nóng thực sự cho điều này xin vui lòng cho tôi biết :)