2009-02-17 18 views
11

Cái này là rất lạ:ListView của không tăng (AllowDrop = True)

Ứng dụng của tôi làm việc tốt, nhưng đột nhiên sự kiện điều khiển ListView của chết tiệt quả thật không sống nữa. Nó chỉ đến và đi mà không có lý do rõ ràng nào. (Rõ ràng) Tôi đã thiết lập thuộc tính AllowDrop là True và xử lý các DragEnter, DragOver và DragDrop sự kiện như sau:

Private Sub lstApplications_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragDrop, Me.DragDrop 
    m_fileNames = CType(e.Data.GetData(DataFormats.FileDrop), String()) 
    mnuType.Show(Cursor.Position, ToolStripDropDownDirection.BelowLeft) 
End Sub 

Private Sub lstApplications_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles lstApplications.DragEnter, Me.DragEnter, lstApplications.DragOver, Me.DragOver 
    If chkMode.Checked OrElse Not e.Data.GetDataPresent(DataFormats.FileDrop, True) Then 
     e.Effect = DragDropEffects.None 
    Else 
     e.Effect = DragDropEffects.Copy 
    End If 
End Sub 

Nó không quan trọng những gì mã tôi đã viết trong hai phương pháp này vì không ai trong số những sự kiện là nâng lên. Có điều gì tôi thiếu ở đây không?


Tôi chạy cùng một ứng dụng trên một máy khác và hoạt động tốt. Sau đó tôi khởi động lại máy tính của riêng mình và mọi thứ bắt đầu hoạt động trở lại. Tôi không chắc chắn, nhưng có vẻ như đã xảy ra sự cố với Windows.

Trả lời

1

Bản thân biểu mẫu có thuộc tính AllowDrop được đặt thành true không?

+0

Có. Thật kỳ lạ khi nó hoạt động được một lúc, nhưng đột nhiên bị vỡ. – TheAgent

+0

Có phải cái gì đó có thể thay đổi giá trị của AllowDrop ở đâu đó trong mã của bạn không? –

+0

Tôi đã chọn. Giá trị thuộc tính là True và nguyên vẹn. – TheAgent

0

Bạn đã thử xóa các trình xử lý phương thức, biên dịch lại, sau đó đưa chúng trở lại và biên dịch lại? Tôi biết nó nghe có vẻ kỳ quặc nhưng đã có lần tôi chỉ cần thiết lập lại các bản sao làm việc của mình.

1

Nếu bạn đang nhận được hành vi liên tục, có thể có một ngoại lệ là thoát trên bộ xử lý của bạn và vô tình ngắt kết nối kéo thả. Hãy thử thêm một tấm chăn Thử/Catch khối xung quanh mã của bạn và làm một Debug.Fail trong khối Catch. Điều đó sẽ ít nhất loại trừ khả năng của một ngoại lệ chưa được giải quyết là vấn đề của bạn.

3

Chỉ cần nhớ chúng tôi đã thực sự thấy điều này trước đây, từ lâu rồi.

Tôi tin rằng điều này xảy ra như sau:

Kéo và thả hoạt động tốt cho đến khi một số mã người dùng ném ngoại lệ trong quá trình kéo và thả.

Ngoại lệ sẽ bị ăn; bạn sẽ không nhận được bất kỳ hộp thoại lỗi nào (tự mình thử và xem). Sau thời điểm này, thao tác kéo và thả sẽ ngừng hoạt động.

+0

Nó không bắt đầu hoạt động ngay cả khi tôi đóng ứng dụng và chạy lại. Tôi không nghĩ đó là một ngoại lệ bị ném. Nhưng tôi không chắc chắn. – TheAgent

1

Có thể là việc tạo điều khiển của bạn đang bị nghiền nát, bằng cách nào đó. Bạn có chắc chắn rằng các xử lý tồn tại và rằng bộ đầy đủ của mã khởi tạo đã chạy?

Gần đây, tôi gặp phải sự cố tương tự khi Control.OnHandleCreated không được chạy do lỗi tôi đã tạo và điều này dẫn đến tất cả các loại lỗi, bao gồm chính xác những gì bạn mô tả ở đây.

+1

+1 Tôi vừa sửa lỗi có cùng các triệu chứng, tức là kéo và thả ngừng hoạt động. Hóa ra tôi đã ghi đè OnHandleCreated nhưng không gọi được cơ sở triển khai. Điều này cũng có hiệu ứng kỳ lạ là sự kiện DragEnter đã đi đến kiểm soát cha mẹ thay thế. –

4

Tôi đã gặp sự cố này khi chạy Visual Studio 2008 trên Windows 7. VS2008 phải chạy với đặc quyền quản trị trên Windows 7, vì vậy tôi đang chạy nó với tư cách người dùng khác. Tôi khá chắc chắn điều này ngăn cản kéo 'n' thả làm việc như ứng dụng chạy tốt khi chạy như một ứng dụng, nhưng kéo thả 'n' sẽ không hoạt động khi được chạy từ Visual Studio.

+0

Điều kỳ lạ là đây là nguyên nhân gây ra sự cố của tôi. Tôi không thể tìm thấy bất kỳ chi tiết nào về lý do tại sao điều này xảy ra. Dù sao cũng cảm ơn bạn! – Spyros

8

Tôi chỉ có giờ đau khổ với một vấn đề tương tự. ba yêu cầu bắt buộc để kéo và thả để hoạt động:

  1. Đảm bảo UI phần tử mục tiêu của bạn có AllowDrop="True", bạn không cần điều này cho toàn bộ Ứng dụng, chỉ cần phần tử bạn muốn bật.
  2. Một số yếu tố không nhận được một số sự kiện chuột (bao gồm d & d) nếu nền của chúng chưa được đặt. Background="Transparent" sẽ thực hiện.
  3. Chạy bất kỳ chương trình nào có đặc quyền của Quản trị viên sẽ gây rối khi kéo và thả. đảm bảo bạn bắt đầu studio trực quan không có đặc quyền của quản trị viên.
+0

Silly me! Tôi quên về các thuộc tính AllowDrop. Cảm ơn nhiều. –

+0

Phần quản trị đó là chìa khóa. Đã điên rồ cố gắng tìm hiểu làm thế nào bản thân mình và một đồng nghiệp đã chạy cùng một mã nhưng các sự kiện đã không bắn cho tôi (vì tôi đã chạy như Admin) nhưng họ đã cho anh ta. –

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