Tôi có một biểu mẫu có nhiều hộp kiểm được tạo động. Khi chạy, làm cách nào tôi có thể lặp qua từng bước để tôi có thể nhận được giá trị và ID của họ?Làm cách nào để tôi có thể lặp qua tất cả các hộp kiểm trên biểu mẫu?
Trả lời
foreach(Control c in this.Controls)
{
if(c is CheckBox)
{
// Do stuff here ;]
}
}
Không hoạt động nếu các điều khiển được nhúng bên trong các điều khiển khác. "này" không phải là tất cả. – Fandango68
Có @ Fernando68 bạn sẽ phải tạo ra một chức năng lặp lại mà đi qua tất cả các 'trẻ em'. Đây là câu trả lời từ gần 8 năm trước: D –
Có, nó không hoạt động –
Khi chúng được tạo, hãy lấy danh sách tham chiếu đến giá trị và sau đó bạn có thể lặp qua danh sách.
Như thế này, có lẽ (nếu đó là trong Windows Forms):
foreach(var checkBox in myForm.Controls.OfType<CheckBox>())
{
//Do something.
}
Tôi đã làm việc này một thời gian - miễn là tôi biết không có tổ trong thùng chứa. Bạn có thể đề cập rằng giải pháp của bạn cũng cho phép một .Where (c => c.Checked) (hoặc biểu thức LINQ khác) được nối thêm vào để không biết. – Herb
Nếu đó là Windows Forms, bạn có thể thử một cái gì đó như thế này:
private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, bool> checkBoxes = new Dictionary<string, bool>();
LoopControls(checkBoxes, this.Controls);
}
private void LoopControls(Dictionary<string, bool> checkBoxes, Control.ControlCollection controls)
{
foreach (Control control in controls)
{
if (control is CheckBox)
checkBoxes.Add(control.Name, ((CheckBox) control).Checked);
if (control.Controls.Count > 0)
LoopControls(checkBoxes, control.Controls);
}
}
Hãy nhớ rằng điều khiển container có thể chứa trẻ em, vì vậy bạn cũng có thể muốn kiểm tra chúng.
tôi sử dụng một phương pháp mở rộng đơn giản mà sẽ làm việc cho bất kỳ loại điều khiển:
public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control
{
bool hit = startingPoint is T;
if (hit)
{
yield return startingPoint as T;
}
foreach (var child in startingPoint.Controls.Cast<Control>())
{
foreach (var item in AllControls<T>(child))
{
yield return item;
}
}
}
Sau đó, bạn có thể sử dụng nó như vậy:
var checkboxes = control.AllControls<CheckBox>();
Sử dụng IEnumerable cho phép bạn chọn cách lưu trữ kết quả, và cũng cho phép bạn sử dụng linq:
var checkedBoxes = control.AllControls<CheckBox>().Where(c => c.Checked);
+1 chúng có thể được lồng nhau, điểm tốt và sử dụng lambdas luôn là dấu cộng) –
Điều này có thể hữu ích hơn Control.Controls –
+1 Để tìm các điều khiển lồng nhau. Câu trả lời này là câu trả lời hay nhất. –
Tôi biết rằng điều này là cũ, nhưng thật dễ dàng như tôi có thể ima gine.
Chỉ cần thêm tất cả các hộp kiểm vào List<Checkbox>
, tất cả trạng thái hộp kiểm nằm trong danh sách và ngay cả khi chúng thay đổi trong giao diện người dùng trong danh sách cũng thay đổi.
List<Checkbox> checkboxes = new List<Checkboxes>();
checkboxes.Add(chk1);
checkboxes.Add(chk2);
//So add all checkboxes you wanna iterate
foreach(Checkbox checkbox in checkboxes){
//Do something using checkbox object
}
Hope this helps :)
- 1. Django, lặp qua tất cả các lỗi biểu mẫu
- 2. Javascript-HTML - cách lặp qua tất cả các biểu mẫu trên một trang?
- 3. Làm thế nào tôi có thể lặp qua tất cả các tuyến đường?
- 4. Làm cách nào tôi có thể chọn tất cả các hộp kiểm từ biểu mẫu bằng JavaScript thuần túy (không có khung công tác JS)?
- 5. làm thế nào tôi có thể lặp qua tất cả các cột của OracleDataReader
- 6. lặp qua tất cả các hộp văn bản trong một biểu mẫu, bao gồm cả các hộp bên trong một hộp nhóm
- 7. Làm cách nào để lặp qua tất cả các dòng tệp được truyền trên dòng lệnh?
- 8. nhận tất cả các hộp kiểm được chọn trong biểu mẫu
- 9. Cách tốt nhất để xóa tất cả các điều khiển trên biểu mẫu C# là gì?
- 10. Cách lặp lại tất cả các hộp văn bản trên trang hiện tại
- 11. Làm cách nào tôi có thể đặt hộp kiểm "(de) chọn tất cả" trong tiêu đề Bảng SWT?
- 12. Extjs 4, các biểu mẫu có hộp kiểm và loadRecord
- 13. Làm cách nào để tạo hộp kiểm yêu cầu trên biểu mẫu ASP.NET?
- 14. Làm cách nào để xóa tất cả các hàng DataGridView khi tải biểu mẫu?
- 15. Tôi có thể lặp qua một Collection.Request.Form không?
- 16. jQuery: làm cách nào để lặp qua tất cả các phần tử 'a'?
- 17. Câu hỏi chọn jQuery (cách chọn tất cả các trường nhập trên một nút EXCEPT mẫu và hộp kiểm)
- 18. Cách nhận tất cả các hộp kiểm đã chọn
- 19. Làm cách nào để xóa văn bản của tất cả các hộp văn bản trong biểu mẫu?
- 20. Làm cách nào để truy cập tất cả các trường biểu mẫu trong Sinatra?
- 21. Làm thế nào để kiểm tra tất cả các hộp kiểm ở dạng hiện tại với jquery?
- 22. Làm cách nào để lặp qua tất cả các khóa của tùy chọn được chia sẻ?
- 23. Làm cách nào để lặp qua tất cả các phương thức của một lớp trong Perl?
- 24. Làm cách nào để tôi có thể lặp qua các từ điển lồng nhau với JSON.NET?
- 25. WPF: Làm cách nào để lặp qua tất cả các điều khiển trong cửa sổ?
- 26. Làm cách nào tôi có thể kiểm tra nhiều hộp kiểm trong jQuery?
- 27. Làm cách nào để xóa tất cả các trường biểu mẫu khỏi mã-đằng sau?
- 28. Cách xác thực biểu mẫu có nhiều hộp kiểm để có ít nhất một kiểm tra
- 29. Làm cách nào để lặp qua nhóm nút radio mà không có biểu mẫu?
- 30. Vòng qua tất cả các hộp kiểm đó là bên trong một thẻ div
Bạn đang nói về Windows Forms hoặc ASP.NET? –