2009-08-07 26 views
5

Tôi khá mới lập trình, vì bạn sẽ sớm thấy ...
Tôi có 2 sự kiện, thực thi cùng một mã. Tôi hiện đang có mã giả sau đây cho một chế độ xem dữ liệu:C# kết hợp 2 sự kiện theo một phương thức

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

Có cách nào để kết hợp sự kiện này thành một sự kiện không? Có cách nào tốt hơn để làm điều này?

Trả lời

7

Tại sao không chỉ có một phương pháp và ánh xạ nó thành hai sự kiện?

private void dgv_CellEvent(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "123"; 
} 

// In the event mapping 

dgv.CellEnter += dgv_CellEvent; 
dgv.CellClick += dgv_CellEvent; 
+0

Dường như cách súc tích, chính xác nhất để thực hiện việc này. Cảm ơn! – muhan

1

Cách dễ nhất là để làm điều này:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    dgv_CellClick(sender, e); 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

Có mã tự động tạo ra bởi các IDE mà dây lên các sự kiện của bạn mặc dù, và bạn có thể sửa đổi này để họ có cả treo lên các xử lý sự kiện tương tự, nhưng tôi không thích rối tung với mã được tạo ra.

Trong ASP.NET hoặc WPF, lưới dữ liệu của bạn hoặc tương tự có thuộc tính xác định tên của trình xử lý sự kiện, vì vậy bạn chỉ có thể trỏ cả hai vào đó.

Nếu bạn đang lập trình trong VB.NET thay vì C#, bạn chỉ có thể viết một phương thức và sử dụng từ khóa Handles để nói rằng phương thức này xử lý cả hai sự kiện.

+2

... hoặc bạn có thể cấu trúc lại nội dung của trình xử lý sự kiện thành phương thức khác và có cả trình xử lý sự kiện gọi phương thức đó. –

+0

Đánh bại tôi để trả lời trong 3 giây :) – mlevit

+0

@mlevit - Tôi thực sự đã nắm bắt và cơ hội và chỉnh sửa nó một lần sau khi gửi quá! –

1

Bạn có thể thử như sau:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    dgv_CellEnter(sender, e); 
} 

Bằng cách đó khi bạn hoặc Bấm vào hoặc đẩy Enter nó sẽ chạy cùng một phương pháp.

Cảm ơn

+2

Cách tốt nhất để có phương pháp trung gian thay vì gọi trình xử lý sự kiện của một điều khiển khác – Gregory

6

Câu trả lời nhanh là có. Đặt sự can đảm của các phương thức theo phương thức riêng của nó và sau đó chỉ cần có sự kiện onclick gọi phương thức đó. Điều này sẽ chỉ cung cấp cho bạn một nơi để cập nhật mã nếu cần phải thay đổi.

Có 100 cách khác nhau để thực hiện việc này và đây là câu hỏi dễ nhất.

Vì vậy, tạo ra một cái gì đó như thế này:

protected void MyNewMethod() 
{ 
    string abc = "123"; 
} 

và sau đó các phương pháp khác của bạn sẽ chỉ cần gọi nó như thế này:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    MyNewMethod(); 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    MyNewMethod(); 
} 

Lựa chọn 2

Chỉ cần gọi phương thức tương tự từ các đánh dấu . Bạn thực sự chỉ cần một trong những phương pháp và sự kiện trong đánh dấu có thể gọi cùng một.

+1

Về Tuỳ chọn 2, câu hỏi có vẻ liên quan đến Windows Forms, không có đánh dấu. –

+0

Ah ... xin lỗi tôi đã bỏ lỡ điều đó. nó vẫn áp dụng chỉ cần chọn điều khiển và đưa lên cửa sổ thuộc tính và sau đó chọn sự kiện "tab". và bạn chỉ có thể chọn cùng một sự kiện từ menu thả xuống. – YetAnotherDeveloper

+1

Tôi coi đây là "cách phù hợp để làm điều đó". Một lợi ích của việc làm theo cách này là nếu các sự kiện có chữ ký khác nhau, bạn vẫn có thể gọi MyNewMethod(). – stone

2

Trong cửa sổ thuộc tính (sử dụng C# Express), bạn có thể chọn trình xử lý sự kiện trong trình đơn thả xuống hoặc nhập tên phương thức theo cách thủ công. Chữ ký vừa phải khớp. Tôi giả định rằng điều này là như nhau trong VS.

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