2009-05-19 5 views
6

Tôi có biểu mẫu cửa sổ có lưới dữ liệu được liên kết với một dữ liệu có thể định cấu hình. Khi nhấp vào nút, bảng dữ liệu được chuyển đến một lớp tĩnh.tăng sự kiện trong lớp tĩnh

private void btnSave_ItemClick(object sender, EventArgs e) 
{ 
    MyStaticClass.SaveData(DataTable dt); 
} 


internal static class MyStaticClass 
{ 
    internal static void SaveData(DataTable dt) 
    { 
     foreach(DataRow dr in dt.rows) 
     { 
      // do something  
     } 
    } 
} 

Tôi cần trả lại thông tin trạng thái từ phương thức SaveData về biểu mẫu của tôi để tôi có thể thông báo cho người dùng về cách xử lý hồ sơ. Ví dụ:

nói - Tôi muốn gửi lại thư mỗi 100 bản ghi - "bản ghi xử lý # ...." để nó được hiển thị trên biểu mẫu.

có thể tăng sự kiện từ lớp tĩnh không?

+0

Cảm ơn bạn đã đặt định dạng mã, Jon; Tôi chưa có đủ danh tiếng ... –

Trả lời

3

Có, bạn có thể tăng sự kiện từ lớp tĩnh của mình. Xác định sự kiện là tĩnh.

public static event EventHandler MyEvent; 
9

Có nó là có thể và hoạt động giống như các sự kiện trong lớp học không tĩnh làm (ngoại trừ việc bạn, tất nhiên, cần phải tuyên bố sự kiện này với như là static). Lưu ý rằng mặc dù thông qua thiết kế này, bạn có thể (ít nhất là theo lý thuyết) có một số hình thức gọi SaveData một cách đồng thời, vì vậy một ví dụ của phương pháp là tăng sự kiện được nhắm mục tiêu cho Biểu mẫu A, trong khi một trường hợp khác sẽ tăng sự kiện được nhắm mục tiêu cho Biểu mẫu B. Vì sự kiện là tĩnh, tất cả các sự kiện sẽ bị bắt bởi cả hai biểu mẫu, vì vậy bạn có thể muốn bao gồm thông tin trong trường hợp biểu mẫu có thể sử dụng để xác định xem có yêu cầu cụ thể về sự kiện hay không. Ví dụ:

Bạn có thể đặt cùng một lớp EventArgs tùy chỉnh và chuyển số DataTable trong đó, để mã nghe có thể xem nếu đó là DataTable từ biểu mẫu đó. Nếu có, giao diện người dùng sẽ được cập nhật, nếu đó không phải là cuộc gọi có thể bị bỏ qua.