2011-11-14 22 views
6

Tôi có ứng dụng winforms sử dụng UserControl. Công việc của người dùng điều khiển là thu thập một tập tin mà người dùng sử dụng trên Windows Explorer, mở tập tin, xác định loại và xử lý nó cho phù hợp.Tại sao DragDrop không hoạt động trong VS2010?

Điều khiển này hoạt động PERFECTLY trong Visual Studio 2008 Pro. Tôi nâng cấp lên VS 2010 Pro, và bây giờ, nó không hoạt động. Có một lá cờ hoặc một tài sản đã thay đổi mà tôi nên biết?

Tôi đã thực hiện bản demo nhanh để kiểm tra. Bản trình diễn này hoạt động hoàn hảo vào năm 2008, nhưng không hoạt động vào năm 2010.

Thiết lập: Tạo dự án biểu mẫu thắng mới. Thêm điều khiển người dùng. Đặt mã sau trong phần mã của điều khiển người dùng. (biên dịch để điều khiển người dùng xuất hiện trong hộp công cụ) Thêm điều khiển người dùng vào biểu mẫu. Chạy chương trình và kéo bất kỳ tệp nào từ cửa sổ lên biểu mẫu. Nếu nó hoạt động, khu vực điều khiển người dùng sẽ thay đổi màu sắc.

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 

     this.AllowDrop = true; 
     this.DragDrop += new DragEventHandler(UserControl1_DragDrop); 
     this.DragEnter += new DragEventHandler(UserControl1_DragEnter); 
     this.DragLeave += new EventHandler(UserControl1_DragLeave); 
    } 

    void UserControl1_DragLeave(object sender, EventArgs e) 
    { 
     this.BackColor = Color.FromName("Control"); 
    } 

    void UserControl1_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      e.Effect = DragDropEffects.Copy; 
      this.BackColor = Color.Blue; 
     } 
     else 
     { 
      e.Effect = DragDropEffects.None; 
     } 
    } 

    void UserControl1_DragDrop(object sender, DragEventArgs e) 
    { 
     this.BackColor = Color.Yellow; 
    } 
} 

Tôi sẵn sàng giải thích hoặc khắc phục sự cố mà các bạn có thể nghĩ ra!

UPDATE:

Tôi đã thử nghiệm sử dụng các ý kiến ​​dưới đây. STILL không hoạt động. Tuy nhiên, tôi đã lưu ý rằng nó chỉ thất bại trong khi trong môi trường phát triển. Khi tôi vào thư mục bin và khởi chạy chương trình theo cách thủ công, nó hoạt động tốt. Nó không hoạt động khi tôi đang ở trong môi trường phát triển, điều này làm cho việc gỡ lỗi trở nên khó khăn một chút. Vẫn đang tìm kiếm bản sửa lỗi lớn.

+0

Chuyển từ màu xám sang màu xanh khi di chuột và màu vàng khi thả trong VS 2010 pro cho tôi. (Chỉ cần FYI). – KreepN

+0

Đó là những gì nó NÊN làm. Rất kỳ quặc !!! Tôi tự hỏi nếu VS2010 của tôi là bánh mì nướng hoặc một cái gì đó. Mọi thứ khác hoạt động hoàn hảo. Cảm ơn bạn đã thử nghiệm cho tôi. Bạn có làm bất cứ điều gì khác hơn là thiết lập ở trên không? Bất kỳ thiết bị chuyển mạch/cờ/thuộc tính nào khác được bật? – Jerry

+0

Tôi dán đoạn mã nguyên bản vào một điều khiển người dùng, thêm nó vào một bảng điều khiển nằm trên một biểu mẫu trên form_load, và sau đó kiểm tra nó. Không có thuộc tính nào được chạm vào. Nó có thể là bạn thêm nó từ hộp công cụ khiến nó hoạt động hài hước. Như tôi đã đề cập, tôi đã thêm nó theo chương trình: UserControl1 uc1 = new UserControl1(); this.panel1.Controls.Add (uc1); – KreepN

Trả lời

13

Nguyên nhân có thể không thành công ở đây là UIPI, thành phần giao diện người dùng của UAC. Bạn không thể kéo từ một quá trình không nâng cao và thả xuống một cửa sổ thuộc sở hữu của một quá trình nâng cao. Bạn sẽ kích hoạt điều này khi bạn bắt đầu Visual Studio từ một phím tắt có tùy chọn "Chạy chương trình này với tư cách quản trị viên" trong tab Tương thích được bật. Cách giải quyết duy nhất là tắt tùy chọn đó. Hoặc để chạy trực tiếp từ tệp .exe, như bạn đã khám phá.

+0

Holy crap !! Điều đó là vậy đó. Tôi đã phải làm cho nó "quản trị" do điều khiển khác tôi đã thêm gần đây cần thiết để ghi vào sổ đăng ký. Cảm ơn bạn rất nhiều. Nó đã khiến tôi khốn khổ. – Jerry

+0

@Hans Bạn có biết cách khởi chạy một ứng dụng với các đặc quyền tiêu chuẩn từ Visual Studio chạy dưới quyền quản trị không? – d11

+0

Sử dụng Debugger.Launch() trong Main() để bạn có thể khởi động chương trình từ Explorer và nhận được một trình gỡ rối được đính kèm sau khi nó bắt đầu. –

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