Trong khi đi qua Checkbox tôi tìm thấy ở đó được viếtGiải thích điều này: Hộp kiểm CheckBox = (CheckBox) người gửi;
CheckBox checkbox = (CheckBox)sender
trên checkBox1_CheckedChanged
sự kiện.
Vui lòng giải thích ý nghĩa của nó?
Trong khi đi qua Checkbox tôi tìm thấy ở đó được viếtGiải thích điều này: Hộp kiểm CheckBox = (CheckBox) người gửi;
CheckBox checkbox = (CheckBox)sender
trên checkBox1_CheckedChanged
sự kiện.
Vui lòng giải thích ý nghĩa của nó?
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.
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.
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.
Vì 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);
}
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. –
@ 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
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.
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");
}
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