2010-09-23 24 views

Trả lời

12

Dòng đơn giản là phôi sender đến CheckBox.

Tại sao?

Chữ ký xử lý sự kiện cho sự kiện CheckedChanged là:

CheckChanged(object sender, EventArgs e) 

Vì vậy, bạn cần phải cast sender trở lại một CheckBox nếu bạn muốn sử dụng bất kỳ cụ thể chức năng CheckBox - object không có nhiều mà bạn có thể sử dụng ...

Bằng cách này, biến số checkbox có thể được sử dụng để lấy Id hộp kiểm và hoạt động trên hộp kiểm.

3

tôi giả định nghĩa phương pháp là một cái gì đó như thế này:

void checkBox1_CheckedChanged(object sender,EventArgs e){ 
    CheckBox checkbox = (CheckBox)sender; 
    //.... 
} 

Về cơ bản những gì họ đang làm ở đây là đúc các sender biến được khai báo là chỉ có một đối tượng chung chung vào một (nhiều hơn nữa "hữu ích") CheckBox biến.

Việc này thường được thực hiện vì bạn phải truyền để truy cập các thuộc tính "cụ thể" của Hộp kiểm.

Ví dụ

sender.Checked=true; 

sẽ không hoạt động. Bạn sẽ phải làm điều này:

((CheckBox)sender).Checked=true; 

trong đó tất nhiên là rất xấu xí, vì vậy nó dễ dàng hơn để khai báo một biến CheckBox mới và sau đó bạn chỉ có thể làm

checkbox.Checked=true; 

không có đúc.

1

Thông số sender (được khai báo là đồng bằng Object) được truyền tới CheckBox như bạn biết rõ rằng người gửi sự kiện đó luôn là Hộp kiểm.

+0

Tôi ước gì có thể +1 bạn một lần nữa cho việc sử dụng 'rõ ràng' :) – xtofl

1

Oded cho biết, bạn cần truyền vì chữ ký xử lý sự kiện.

Bạn thể sử dụng checkBox1 trong xử lý sự kiện thay vì các định kiểu, nhưng đối phó với sender, bạn có thể tái sử dụng các CheckChanged logic để điều khiển khác cũng - mặc dù trong trường hợp đó, nó phải được refactored vào cái gì đó dọc theo dòng:

private void MyFancyCheckChanged(CheckBox sender, EventArgs e) 
{ 
    // do stuff 
} 

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    MyFancyCheckChanged((CheckBox) sender, e); 
} 
+0

Bạn chưa đạt được bất cứ điều gì bằng cách làm này. Tất cả những gì bạn đã làm là đặt bàn cho một nhà kho spaghetti. –

+1

@ Jelel: nếu bạn có nghĩa là phương pháp trích xuất, điều đó phụ thuộc vào việc mã thực sự * là * sử dụng chung - trong trường hợp đó có lẽ cũng nên được rút ra khỏi lớp và đặt một nơi nào đó phù hợp hơn. – snemarch

5

Dưới đây là một example.Suppose trong GridView hoặc Repeater chúng tôi muốn chọn tất cả option.As bạn đã thấy vào hộp mail của bạn.Có một hộp kiểm duy nhất nếu bạn nhấp vào tất cả sẽ chọn. Mã sẽ giải thích rõ hơn cho bạn.

protected void ChkAll_CheckedChanged(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem rowItem in this.rptFriendsRecord.Items) 
    { 
     CheckBox chk = (CheckBox)rowItem.FindControl("cbFriend"); 
     chk.Checked = ((CheckBox)sender).Checked; 
    } 
} 

Tôi hy vọng nó hoạt động.

0

Lớp Hộp kiểm biểu thị một hộp kiểm mà người dùng có thể chọn và xóa. Chủ đề này giới thiệu cho bạn điều khiển CheckBox trong Windows Presentation Foundation (WPF) và mô tả cách tạo các phần tử CheckBox trong Ngôn ngữ đánh dấu ứng dụng mở rộng (XAML) và C#, đặt trình xử lý sự kiện trong C#, tạo các điều khiển CheckBox chứa nội dung phong phú như hình ảnh, và sử dụng kiểu dáng để thay đổi diện mạo của điều khiển. Ở đây tôi đã đưa ra một mẫu cho bạn.

<asp:CheckBox ID="CheckBox1" runat="server" Text="www.google.com" 
    OnCheckedChanged="CheckBox1_CheckedChanged" /> 
<asp:CheckBox ID="CheckBox2" runat="server" Text="www.yahoo.com" /> 

Bộ luật Đằng sau code đang

protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    if (CheckBox1.Checked) 
     Response.Redirect("www.google.com"); 
    else 
     Response.Redirect("www.yahoo.com"); 
} 
Các vấn đề liên quan