2012-02-29 32 views
6

Tôi tự hỏi nếu có ai biết một phần mở rộng bật lên cảnh báo nếu bạn kéo tệp vào thư mục khác thông qua trình khám phá giải pháp VS 2010. Nhiều lần tôi sẽ được trên một tập tin và máy tính của tôi có thể tụt hậu trong một giây và tất cả của một bất ngờ tập tin bây giờ là trong một số thư mục khác và tôi thậm chí có thể không nhận thấy nó.Kéo tập tin cảnh báo mở rộng VS 2010?

+0

Bạn có thể vui lòng chọn câu trả lời của shamp00 là chính xác và tặng anh ấy tiền thưởng không? Nếu không, câu hỏi này có thể bị đóng trước và anh ta sẽ mất giải thưởng tiền thưởng. – Will

+0

Hmmm. Chobo2 - bạn đã không chỉ định "miễn phí" như là một phần của tiêu chuẩn cho câu hỏi - nhưng có lẽ bạn đã đặt tiền thưởng và nói "miễn phí" sau khi câu trả lời không tự do được đăng? ... Cho dù bạn có trao tiền thưởng hay không, Tôi sẽ đăng một khoản tiền thưởng đại diện 100 cho ai đó để tìm tiện ích mở rộng miễn phí - trên một câu hỏi mới nếu bạn đóng câu hỏi này. – perfectionist

+0

Không Tôi đã đăng tiền thưởng trước khi bất kỳ câu trả lời nào có thể được đưa ra (do đó tại sao tôi không bao giờ chỉnh sửa câu hỏi ban đầu của mình). Tôi không có kế hoạch đóng câu hỏi này vì tôi thực sự muốn tìm phần mở rộng này (miễn phí - sẽ không trả $ 50 cho VSCommands cho một tính năng và vì vậy tại sao tôi không tặng thưởng cho shamp00 như một lựa chọn trả tiền chỉ là cách để nhiều cho một tính năng mà tôi yêu cầu.) – chobo2

Trả lời

7

Có một tiện ích Visual Studio có sẵn được gọi là VSCommands 2010 có tính năng Ngăn tình cờ Kéo & Thả trong Solution Explorer.

enter image description here

Sửa Tính năng này là một phần của gói Pro mà không phải là miễn phí.

+0

Nó không phải là miễn phí. Câu hỏi mua sắm hút. –

+0

@Hans Bạn đúng - Tôi đã cập nhật câu trả lời của mình. – shamp00

0

Tôi không biết phần mở rộng Visual Studio miễn phí có thể làm điều đó, nhưng đây là mẫu C# của Addin thể hiện cách móc vào Visual Studio toàn cầu xóa & đổi tên quản lý tệp. Nó dựa trên giao diện IVsTrackProjectDocumentsEvents2.

Bạn sẽ phải mở rộng hai phương pháp OnQueryxxx cho phù hợp với nhu cầu của mình.

using System; 
using System.Diagnostics; 
using EnvDTE; 
using EnvDTE80; 
using Extensibility; 
using Microsoft.VisualStudio.Shell; 
using Microsoft.VisualStudio.Shell.Interop; 

namespace MyAddin1 
{ 
    public class Connect : IDTExtensibility2, IVsTrackProjectDocumentsEvents2 
    { 
     private uint _trackerCookie; 

     public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
     { 
      _applicationObject = (DTE2)application; 
      _addInInstance = (AddIn)addInInst; 

      // the Addin project needs assembly references to Microsoft.VisualStudio.Shell, Microsoft.VisualStudio.Shell.Interop && Microsoft.VisualStudio.OLE.Interop 
      // any version should do 
      ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_applicationObject); 
      IVsTrackProjectDocuments2 tracker = (IVsTrackProjectDocuments2)sp.GetService(typeof(SVsTrackProjectDocuments)); 

      // ask VS to notify us of files & directories changes 
      tracker.AdviseTrackProjectDocumentsEvents(this, out _trackerCookie); 
     } 

     public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) 
     { 
      if (_trackerCookie != 0) 
      { 
       // we quit, tell VS not to notify us anymore 
       ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_applicationObject); 
       IVsTrackProjectDocuments2 tracker = (IVsTrackProjectDocuments2)sp.GetService(typeof(SVsTrackProjectDocuments)); 
       tracker.UnadviseTrackProjectDocumentsEvents(_trackerCookie); 
       _trackerCookie = 0; 
      } 
     } 

     public int OnQueryRenameFiles(IVsProject pProject, int cFiles, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEFILEFLAGS[] rgFlags, VSQUERYRENAMEFILERESULTS[] pSummaryResult, VSQUERYRENAMEFILERESULTS[] rgResults) 
     { 
      Trace.WriteLine("OnQueryRenameFiles pProject:" + pProject + " old[0]:" + rgszMkOldNames[0] + " new[0]:" + rgszMkNewNames[0]); 

      // TODO: implement this (I have assumed cFiles is 1 here) 
      if (!NotRenameOk(old[0], new[0]) 
      { 
       rgResults[0] = VSQUERYRENAMEFILERESULTS.VSQUERYRENAMEFILERESULTS_RenameNotOK; // nope, it's not ok 
      } 
      return 0; 
     } 

     public int OnQueryRemoveFiles(IVsProject pProject, int cFiles, string[] rgpszMkDocuments, VSQUERYREMOVEFILEFLAGS[] rgFlags, VSQUERYREMOVEFILERESULTS[] pSummaryResult, VSQUERYREMOVEFILERESULTS[] rgResults) 
     { 
      Trace.WriteLine("OnQueryRemoveFiles pProject:" + pProject + " file[0]:" + rgpszMkDocuments[0]); 

      // TODO: needs to be implemented, use rgResults to tell VS if it's ok or not 
      return 0; 
     } 

     // other IVsTrackProjectDocumentsEvents2 methods implementation omitted for brevity... 
+0

không ... hoàn toàn ... chắc chắn cách bắt đầu sử dụng mã này. Bạn có thể liên kết tôi với bất kỳ dự án mẫu/ví dụ/tài nguyên có thể áp dụng nào để thực hiện với cách thêm mã vs2010 không? – perfectionist

+0

@perfectionist - Bạn có thể sử dụng Visual Studio để tạo một addin như vậy: chỉ cần chọn Dự án mới/Các loại dự án/Mở rộng và Visual Studio bổ trợ, sau đó sao chép dán mã. Tuy nhiên, nếu bạn chưa có nhà phát triển, bạn sẽ không thể triển khai hoạt động của OnQueryRename/Remove ... –

+0

Được rồi, có vẻ như điều này có thể khả thi - bạn chắc chắn đã cho tôi điều gì đó để làm về vấn đề này, vì vậy, bạn được trao tặng tiền thưởng. Huzzah. Tôi sẽ đăng lại câu hỏi này với kết quả. – perfectionist

Các vấn đề liên quan