2011-12-28 25 views
7

Tôi thêm một handler để textbox sử dụng đoạn mã sau:Add/Remove xử lý để textbox

private void frmLogin_Load(object sender, EventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown += new KeyEventHandler(TextBox_KeyDown); 
     }  
    } 
} 

Tôi cũng loại bỏ handler sử dụng đoạn mã sau:

private void frmLogin_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown -= new KeyEventHandler(TextBox_KeyDown); 
     } 
    } 
} 

có phải là cách đúng hay Có một lựa chọn tốt hơn?

Trả lời

5

Nó là tốt, nhưng bạn không cần phải loại bỏ các xử lý, và thêm các điều khiển chỉ cần đặt này:

tb1.KeyDown += TextBox_KeyDown; 

new KeyEventHandler(TextBox_KeyDown); là không cần thiết.

+0

Và tôi biết trình biên dịch tạo trình xử lý thêm bằng KeyEventHandler mới, nhưng công cụ tái cấu trúc của tôi cho tôi biết đây là Tạo ủy quyền dự phòng. – Piyey

2

Để loại bỏ các xử lý sự kiện, bạn nên chỉ làm:

tb1.KeyDown -= TextBox_KeyDown; 
4

cách tiếp cận của bạn là tốt. Trong cả việc bổ sung và loại bỏ các đại biểu xử lý sự kiện, bạn có thể bỏ qua các new KeyEventHandler và dấu ngoặc đơn xung quanh xung quanh TextBox_KeyDown. Chúng được ngụ ý bởi trình biên dịch (miễn là phương thức TextBox_KeyDown có chữ ký mong đợi). Đây hoàn toàn là một vấn đề ưu tiên của khóa học.

3

Có, điều đó hoàn toàn chính xác. Tuy nhiên, bạn có thể sử dụng ký hiệu viết tắt:

tb1.KeyDown -= TextBox_KeyDown; 

Mặc dù hiệu ứng hoàn toàn giống nhau.

Tuy nhiên, việc xác định xem bạn có thực sự cần xóa trình xử lý sự kiện của mình hay không? Vòng đời của biểu mẫu của bạn và TextBox là gì? nếu biểu mẫu 'sở hữu' TexBox, tức là nó tồn tại lâu hơn, thì bạn không cần phải gỡ bỏ trình xử lý sự kiện.

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