2009-07-27 11 views
6

Trước hết, sự kiện mousewheel không được liệt kê trong ngăn sự kiện của Visual Studio 2008, điều này rất khó chịu.Không thể kích hoạt sự kiện MouseWheel trong C# Windows Forms

tôi thấy đúng định dạng trực tuyến mặc dù, và đã viết điều này vào mã của tôi:

private void Form1_MouseWheel(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

... từ đó tôi nhận được không phản ứng khi mousewheel được quay.

Tôi đang làm điều này trong khu vực lớp chính của mã và nhà thiết kế chỉ chứa một biểu mẫu/cửa sổ/bất kỳ thứ gì để con chuột không mất tiêu điểm.

namespace BlahBlah 
{ 
    public partial class Form1 : Form 
    { 

Và ngược lại, tôi có phương pháp này ngay trên mousewheel một và nó hoạt động tốt:

private void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

Nếu tôi phải đoán, tôi đang nghĩ đến tôi không chính xác liên kết mã vào biểu mẫu (aka: tất cả những thứ mà studio trực quan sẽ làm cho tôi nếu tôi thêm sự kiện này thông qua bảng sự kiện của nhà thiết kế). Nhưng tôi có thể sai hoặc chỉ đang mắc một số lỗi ngớ ngẩn.

Bạn có thể giúp tôi nhận được bất kỳ loại phản ứng nào khi xoay bánh xe chuột không? Cảm ơn!

Trả lời

11

Sự kiện bánh lăn cần phải được thiết lập.

Thêm phần này vào constructor Form1 của (Sau InitalizeComponents();)

this.MouseWheel+= new MouseEventHandler(Form1_MouseWheel); 
+0

Vậy đó, cảm ơn nhiều! Câu hỏi bên lề: Tôi cũng có một phương thức cho phương thức MouseMove của tôi (this.MouseMove + = Form1_MouseMove;), nhưng không dành cho MouseClick. Tại sao không cần nó? – cksubs

+1

Chà ... nó có phản ứng với một cú click chuột không? Nếu nó không cần phải phản ứng với các cú click chuột, nó sẽ không cần. Một số điều khiển tự động có liên kết lên các sự kiện nhấp chuột (Đối với di chuyển và không có gì.) Nó phụ thuộc vào những gì bạn đang cố gắng để thực hiện. – Kurisu

+0

Tôi chỉ có nghĩa là phương pháp MouseClick của tôi hoạt động (kích hoạt khi nhấp chuột) mà không cần công cụ ".... + = ...." trong hàm tạo. Đó là lý do tại sao tôi quên thêm một cái gì đó như thế cho MouseWheel, MouseClick làm việc tốt. – cksubs

1

Tôi không biết cách đăng ký sự kiện cụ thể đó nhưng thay vào đó bạn có thể ghi đè phương thức thích hợp trên biểu mẫu.

6

tôi không có đủ uy tín để đáp ứng với một lời nhận xét, nhưng câu trả lời cho câu hỏi ở bên em là các đại biểu cần phải Được thiết lập. Tuy nhiên khi bạn tạo một bằng cách nhấp đúp vào nó trong ngăn thuộc tính, mã sẽ tự động được tạo và được đặt trong tệp * .designer.cs trong phương thức InitializeComponent.

+1

Vâng, hãy xem tệp designer.cs và tìm trong các khu vực, bạn sẽ thấy cách gen mã đã thực hiện một chút công việc nối dây các sự kiện này cho bạn. –

1

Tốt nhất trong trường hợp này là ghi đè hàm OnMouseWheel thành viên thay vì đăng ký sự kiện. Ví dụ:

public class MyFrm : Form 
{ 
    protected override void OnMouseWheel(MouseEventArgs e) 
    { 
     /*Handle the mouse wheel here*/ 
     base.OnMouseWheel(e); 
    } 
} 
+0

Tại sao điều đó tốt hơn? –

+1

@JonofAllTrades Nó có hiệu suất tốt hơn và linh hoạt hơn (bạn có thể thực hiện công việc của mình trước bất kỳ đại biểu nào đã đăng ký sự kiện). http://stackoverflow.com/questions/159317/when-should-you-override-onevent-as-opposed-to-subscribing-to-the-event-when-inh –